annotate src/ui_tabcomp.c @ 1810:c416d099a3dc

GTK marks several functions as deprecated The following functions has been replaced and deprecated by version 2.20: - GTK_WIDGET_CAN_FOCUS - GTK_WIDGET_DRAWABLE - GTK_WIDGET_HAS_FOCUS - GTK_WIDGET_HAS_GRAB - GTK_WIDGET_IS_SENSITIVE - GTK_WIDGET_NO_WINDOW - GTK_WIDGET_REALIZED - GTK_WIDGET_SENSITIVE - GTK_WIDGET_STATE - GTK_WIDGET_TOPLEVEL - GTK_WIDGET_VISIBLE
author mow
date Mon, 10 May 2010 11:32:56 +0000
parents 956aab097ea7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
1 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
2 * (SLIK) SimpLIstic sKin functions
69
31759d770628 Fri Oct 13 10:27:22 2006 John Ellis <johne@verizon.net>
gqview
parents: 12
diff changeset
3 * (C) 2006 John Ellis
1802
956aab097ea7 added 2010 to copyright text
nadvornik
parents: 1448
diff changeset
4 * Copyright (C) 2008 - 2010 The Geeqie Team
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
5 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
6 * Author: John Ellis
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
7 *
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
8 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
9 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
10 * This software comes with no warranty of any kind, use at your own risk!
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
11 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
12
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
13 #ifdef HAVE_CONFIG_H
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
14 # include "config.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
15 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
16 #include "intl.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
17
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
18 #include <stdio.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
19 #include <stdlib.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
20 #include <string.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
21 #include <unistd.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
22 #include <sys/types.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
23 #include <dirent.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
24
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
25 #include <gdk/gdk.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
26 #include <gtk/gtk.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
27 #include <gdk-pixbuf/gdk-pixbuf.h>
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
28
281
9995c5fb202a gqview.h -> main.h
zas_
parents: 260
diff changeset
29 #include "main.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
30 #include "ui_tabcomp.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
31
902
c414002a1f27 Move history_list_*() functions to separate files:
zas_
parents: 734
diff changeset
32 #include "history_list.h"
1022
9962b24b6b43 Move miscellaneous functions to their own files (new misc.[ch]).
zas_
parents: 991
diff changeset
33 #include "misc.h" /* expand_tilde() */
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
34 #include "ui_fileops.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
35 #include "ui_spinner.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
36 #include "ui_utildlg.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
37
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
38 #include <gdk/gdkkeysyms.h> /* for key values */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
39
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
40
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
41 /* define this to enable a pop-up menu that shows possible matches
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
42 * #define TAB_COMPLETION_ENABLE_POPUP_MENU
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
43 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
44 #define TAB_COMPLETION_ENABLE_POPUP_MENU 1
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
45 #define TAB_COMP_POPUP_MAX 1000
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
46
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
47 #ifdef TAB_COMPLETION_ENABLE_POPUP_MENU
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
48 #include "ui_menu.h"
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
49 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
50
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
51
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
52 /* ----------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
53 Tab completion routines, can be connected to any gtkentry widget
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
54 using the tab_completion_add_to_entry() function.
726
a1dcef8cd1ae Use G_DIR_SEPARATOR where applicable.
zas_
parents: 722
diff changeset
55 Use remove_trailing_slash() to strip the trailing G_DIR_SEPARATOR.
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
56 ----------------------------------------------------------------*/
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
57
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
58 typedef struct _TabCompData TabCompData;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
59 struct _TabCompData
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
60 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
61 GtkWidget *entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
62 gchar *dir_path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
63 GList *file_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
64 void (*enter_func)(const gchar *, gpointer);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
65 void (*tab_func)(const gchar *, gpointer);
1167
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
66 void (*tab_append_func)(const gchar *, gpointer, gint);
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
67
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
68 gpointer enter_data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
69 gpointer tab_data;
1167
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
70 gpointer tab_append_data;
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
71
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
72 GtkWidget *combo;
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
73 gboolean has_history;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
74 gchar *history_key;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
75 gint history_levels;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
77 FileDialog *fd;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
78 gchar *fd_title;
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
79 gboolean fd_folders_only;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
80 GtkWidget *fd_button;
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
81
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
82 guint choices;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
83 };
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
84
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
85
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
86 static void tab_completion_select_show(TabCompData *td);
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
87 static gint tab_completion_do(TabCompData *td);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
88
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
89 static void tab_completion_free_list(TabCompData *td)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
90 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
91 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
92
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
93 g_free(td->dir_path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
94 td->dir_path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
95
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
96 list = td->file_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
97
516
b7e99bfeadc9 Convert the minority of while() to while ().
zas_
parents: 475
diff changeset
98 while (list)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
99 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
100 g_free(list->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
101 list = list->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
102 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
103
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
104 g_list_free(td->file_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
105 td->file_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
106 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
107
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
108 static void tab_completion_read_dir(TabCompData *td, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
109 {
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
110 DIR *dp;
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
111 struct dirent *dir;
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
112 GList *list = NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
113 gchar *pathl;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
114
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
115 tab_completion_free_list(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
116
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
117 pathl = path_from_utf8(path);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
118 dp = opendir(pathl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
119 if (!dp)
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
120 {
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
121 /* dir not found */
1385
b4e6fee484f7 Fix utf8/locale conversion warning: the path passed to isdir() is not in UTF8 (if local fs is not in UFT8) so do not use it (isdir() uses stat_utf8() which calls path_from_utf8()).
zas_
parents: 1382
diff changeset
122 g_free(pathl);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
123 return;
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
124 }
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
125 while ((dir = readdir(dp)) != NULL)
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
126 {
69
31759d770628 Fri Oct 13 10:27:22 2006 John Ellis <johne@verizon.net>
gqview
parents: 12
diff changeset
127 gchar *name = dir->d_name;
31759d770628 Fri Oct 13 10:27:22 2006 John Ellis <johne@verizon.net>
gqview
parents: 12
diff changeset
128 if (strcmp(name, ".") != 0 && strcmp(name, "..") != 0)
31759d770628 Fri Oct 13 10:27:22 2006 John Ellis <johne@verizon.net>
gqview
parents: 12
diff changeset
129 {
1385
b4e6fee484f7 Fix utf8/locale conversion warning: the path passed to isdir() is not in UTF8 (if local fs is not in UFT8) so do not use it (isdir() uses stat_utf8() which calls path_from_utf8()).
zas_
parents: 1382
diff changeset
130 gchar *abspath = g_build_filename(pathl, name, NULL);
1370
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
131
1385
b4e6fee484f7 Fix utf8/locale conversion warning: the path passed to isdir() is not in UTF8 (if local fs is not in UFT8) so do not use it (isdir() uses stat_utf8() which calls path_from_utf8()).
zas_
parents: 1382
diff changeset
132 if (g_file_test(abspath, G_FILE_TEST_IS_DIR))
1370
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
133 {
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
134 gchar *dname = g_strconcat(name, G_DIR_SEPARATOR_S, NULL);
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
135 list = g_list_prepend(list, path_to_utf8(dname));
1371
2c2f86e30f6c Fix memleak in previous patch.
zas_
parents: 1370
diff changeset
136 g_free(dname);
1370
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
137 }
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
138 else
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
139 {
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
140 list = g_list_prepend(list, path_to_utf8(name));
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
141 }
0011d6859ec5 Add a directory separator at the end of names in tab completion list to indicate directories.
zas_
parents: 1365
diff changeset
142 g_free(abspath);
69
31759d770628 Fri Oct 13 10:27:22 2006 John Ellis <johne@verizon.net>
gqview
parents: 12
diff changeset
143 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
144 }
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
145 closedir(dp);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
146
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
147 td->dir_path = g_strdup(path);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
148 td->file_list = list;
1385
b4e6fee484f7 Fix utf8/locale conversion warning: the path passed to isdir() is not in UTF8 (if local fs is not in UFT8) so do not use it (isdir() uses stat_utf8() which calls path_from_utf8()).
zas_
parents: 1382
diff changeset
149 g_free(pathl);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
150 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
151
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
152 static void tab_completion_destroy(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
153 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
154 TabCompData *td = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
155
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
156 tab_completion_free_list(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
157 g_free(td->history_key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
158
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
159 if (td->fd) file_dialog_close(td->fd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
160 g_free(td->fd_title);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
161
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
162 g_free(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
163 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
164
991
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
165 static gchar *tab_completion_get_text(TabCompData *td)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
166 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
167 gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
168
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
169 text = g_strdup(gtk_entry_get_text(GTK_ENTRY(td->entry)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
170
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
171 if (text[0] == '~')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
172 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
173 gchar *t = text;
720
d8a88f279aca Use expand_tilde() instead of simple concatenation, it allows correct expansion
zas_
parents: 673
diff changeset
174 text = expand_tilde(text);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
175 g_free(t);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
176 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
177
991
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
178 return text;
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
179 }
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
180
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
181 static gboolean tab_completion_emit_enter_signal(TabCompData *td)
991
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
182 {
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
183 gchar *text;
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
184 if (!td->enter_func) return FALSE;
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
185
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
186 text = tab_completion_get_text(td);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
187 td->enter_func(text, td->enter_data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
188 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
189
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
190 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
191 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
192
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
193 static void tab_completion_emit_tab_signal(TabCompData *td)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
194 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
195 gchar *text;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
196 if (!td->tab_func) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
197
991
185e6a74517d Slight code redundancy reduction.
zas_
parents: 902
diff changeset
198 text = tab_completion_get_text(td);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
199 td->tab_func(text, td->tab_data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
200 g_free(text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
201 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
202
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
203 #ifdef TAB_COMPLETION_ENABLE_POPUP_MENU
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
204 void tab_completion_iter_menu_items(GtkWidget *widget, gpointer data)
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
205 {
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
206 TabCompData *td = data;
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
207 GtkWidget *child;
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
208
1810
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
209 #if GTK_CHECK_VERSION(2,20,0)
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
210 if (!gtk_widget_get_visible(widget)) return;
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
211 #else
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
212 if (!GTK_WIDGET_VISIBLE(widget)) return;
1810
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
213 #endif
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
214
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
215 child = gtk_bin_get_child(GTK_BIN(widget));
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
216 if (GTK_IS_LABEL(child)) {
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
217 const gchar *text = gtk_label_get_text(GTK_LABEL(child));
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
218 const gchar *entry_text = gtk_entry_get_text(GTK_ENTRY(td->entry));
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
219 const gchar *prefix = filename_from_path(entry_text);
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
220 guint prefix_len = strlen(prefix);
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
221
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
222 if (strlen(text) < prefix_len || strncmp(text, prefix, prefix_len))
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
223 {
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
224 /* Hide menu items not matching */
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
225 gtk_widget_hide(widget);
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
226 }
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
227 else
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
228 {
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
229 /* Count how many choices are left in the menu */
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
230 td->choices++;
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
231 }
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
232 }
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
233 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
234
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
235 static gboolean tab_completion_popup_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
236 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
237 TabCompData *td = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
238
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
239 if (event->keyval == GDK_Tab ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
240 event->keyval == GDK_BackSpace ||
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
241 (event->keyval >= 0x20 && event->keyval <= 0xFF) )
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
242 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
243 if (event->keyval >= 0x20 && event->keyval <= 0xFF)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
244 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
245 gchar buf[2];
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
246 gint p = -1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
247
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
248 buf[0] = event->keyval;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
249 buf[1] = '\0';
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
250 gtk_editable_insert_text(GTK_EDITABLE(td->entry), buf, 1, &p);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
251 gtk_editable_set_position(GTK_EDITABLE(td->entry), -1);
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
252
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
253 /* Reduce the number of entries in the menu */
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
254 td->choices = 0;
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
255 gtk_container_foreach(GTK_CONTAINER(widget), tab_completion_iter_menu_items, (gpointer) td);
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
256 if (td->choices > 1) return TRUE; /* multiple choices */
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
257 if (td->choices > 0) tab_completion_do(td); /* one choice */
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
258 }
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
259
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
260 /* close the menu */
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
261 gtk_menu_popdown(GTK_MENU(widget));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
262 /* doing this does not emit the "selection done" signal, unref it ourselves */
1043
5fc64d6252e7 Replaced gtk depreceated code.
bruclik
parents: 1022
diff changeset
263 #if GTK_CHECK_VERSION(2,12,0)
5fc64d6252e7 Replaced gtk depreceated code.
bruclik
parents: 1022
diff changeset
264 g_object_unref(widget);
5fc64d6252e7 Replaced gtk depreceated code.
bruclik
parents: 1022
diff changeset
265 #else
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
266 gtk_widget_unref(widget);
1043
5fc64d6252e7 Replaced gtk depreceated code.
bruclik
parents: 1022
diff changeset
267 #endif
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
268 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
269 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
270
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
271 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
272 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
273
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
274 static void tab_completion_popup_cb(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
275 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
276 gchar *name = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
277 TabCompData *td;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
278 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
279
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
280 td = g_object_get_data(G_OBJECT(widget), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
281 if (!td) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
282
721
b736a2e3129b tab_completion_popup_cb(): use g_build_filename() and simplify code.
zas_
parents: 720
diff changeset
283 buf = g_build_filename(td->dir_path, name, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
284 gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
285 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(buf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
286 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
287
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
288 tab_completion_emit_tab_signal(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
289 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
290
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
291 static void tab_completion_popup_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
292 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
293 TabCompData *td = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
294 gint height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
295 PangoLayout *layout;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
296 PangoRectangle strong_pos, weak_pos;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
297 gint length;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
298 gint xoffset, yoffset;
12
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
299 GtkRequisition req;
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
300 GdkScreen *screen;
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
301 gint monitor_num;
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
302 GdkRectangle monitor;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
303
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
304 gdk_window_get_origin(td->entry->window, x, y);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
305
12
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
306 screen = gtk_widget_get_screen(GTK_WIDGET(menu));
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
307 monitor_num = gdk_screen_get_monitor_at_window(screen, td->entry->window);
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
308 gdk_screen_get_monitor_geometry(screen, monitor_num, &monitor);
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
309
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
310 gtk_widget_size_request(GTK_WIDGET(menu), &req);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
311
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
312 length = strlen(gtk_entry_get_text(GTK_ENTRY(td->entry)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
313 gtk_entry_get_layout_offsets(GTK_ENTRY(td->entry), &xoffset, &yoffset);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
314
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
315 layout = gtk_entry_get_layout(GTK_ENTRY(td->entry));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
316 pango_layout_get_cursor_pos(layout, length, &strong_pos, &weak_pos);
12
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
317
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
318 *x += strong_pos.x / PANGO_SCALE + xoffset;
12
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
319
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
320 height = MIN(td->entry->requisition.height, td->entry->allocation.height);
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
321
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
322 if (req.height > monitor.y + monitor.height - *y - height &&
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
323 *y - monitor.y > monitor.y + monitor.height - *y)
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
324 {
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
325 height = MIN(*y - monitor.y, req.height);
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
326 gtk_widget_set_size_request(GTK_WIDGET(menu), -1, height);
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
327 *y -= height;
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
328 }
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
329 else
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
330 {
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
331 *y += height;
147f4c4b9025 ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents: 9
diff changeset
332 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
333 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
335 static void tab_completion_popup_list(TabCompData *td, GList *list)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
336 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
337 GtkWidget *menu;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
338 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
339 GdkEvent *event;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
340 guint32 etime;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
341 gint ebutton;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
342 gint count = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
343
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
344 if (!list) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
345
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
346 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
347 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
348 * well, the menu would be too long anyway...
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
349 * (listing /dev causes gtk+ window allocation errors, -> too big a window)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
350 * this is why menu popups are disabled, this really should be a popup scrollable listview.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
351 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
352 if (g_list_length(list) > 200) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
353 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
354
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
355 menu = popup_menu_short_lived();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
356
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
357 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
358 while (work && count < TAB_COMP_POPUP_MAX)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
359 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
360 gchar *name = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
361 GtkWidget *item;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
362
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
363 item = menu_item_add_simple(menu, name, G_CALLBACK(tab_completion_popup_cb), name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
364 g_object_set_data(G_OBJECT(item), "tab_completion_data", td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
365
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
366 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
367 count++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
368 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
369
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
370 g_signal_connect(G_OBJECT(menu), "key_press_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
371 G_CALLBACK(tab_completion_popup_key_press), td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
372
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
373 /* peek at the current event to get the time, etc. */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
374 event = gtk_get_current_event();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
375
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
376 if (event && event->type == GDK_BUTTON_RELEASE)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
377 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
378 ebutton = event->button.button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
379 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
380 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
381 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
382 ebutton = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
383 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
384
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
385 if (event)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
386 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
387 etime = gdk_event_get_time(event);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
388 gdk_event_free(event);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
389 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
390 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
391 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
392 etime = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
393 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
394
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
395 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
396 tab_completion_popup_pos_cb, td, ebutton, etime);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
397 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
398
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
399 #ifndef CASE_SORT
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
400 #define CASE_SORT strcmp
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
401 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
402
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
403 static gint simple_sort(gconstpointer a, gconstpointer b)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
404 {
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
405 return CASE_SORT((gchar *)a, (gchar *)b);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
406 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
407
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
408 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
409
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
410 static gboolean tab_completion_do(TabCompData *td)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
411 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
412 const gchar *entry_text = gtk_entry_get_text(GTK_ENTRY(td->entry));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
413 const gchar *entry_file;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
414 gchar *entry_dir;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
415 gchar *ptr;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1388
diff changeset
416 gboolean home_exp = FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
417
1388
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
418 if (entry_text[0] == '\0')
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
419 {
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
420 entry_dir = g_strdup(G_DIR_SEPARATOR_S); /* FIXME: root directory win32 */
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
421 gtk_entry_set_text(GTK_ENTRY(td->entry), entry_dir);
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
422 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(entry_dir));
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
423 g_free(entry_dir);
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
424 return FALSE;
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
425 }
2496a345c452 Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
zas_
parents: 1385
diff changeset
426
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
427 /* home dir expansion */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
428 if (entry_text[0] == '~')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
429 {
720
d8a88f279aca Use expand_tilde() instead of simple concatenation, it allows correct expansion
zas_
parents: 673
diff changeset
430 entry_dir = expand_tilde(entry_text);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
431 home_exp = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
432 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
433 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
434 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
435 entry_dir = g_strdup(entry_text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
436 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
437
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
438 if (isfile(entry_dir))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
439 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
440 if (home_exp)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
441 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
442 gtk_entry_set_text(GTK_ENTRY(td->entry), entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
443 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(entry_dir));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
444 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
445 g_free(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
446 return home_exp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
447 }
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
448
1382
31a747f9d268 Fix tab completion when entering "/et[TAB]" it was changed to "et", this is fixed.
zas_
parents: 1371
diff changeset
449 entry_file = filename_from_path(entry_text);
31a747f9d268 Fix tab completion when entering "/et[TAB]" it was changed to "et", this is fixed.
zas_
parents: 1371
diff changeset
450
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
451 if (isdir(entry_dir) && strcmp(entry_file, ".") != 0 && strcmp(entry_file, "..") != 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
452 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
453 ptr = entry_dir + strlen(entry_dir) - 1;
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
454 if (ptr[0] == G_DIR_SEPARATOR)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
455 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
456 if (home_exp)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
457 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
458 gtk_entry_set_text(GTK_ENTRY(td->entry), entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
459 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(entry_dir));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
460 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
461
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
462 tab_completion_read_dir(td, entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
463 td->file_list = g_list_sort(td->file_list, simple_sort);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
464 if (td->file_list && !td->file_list->next)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
465 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
466 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
467 const gchar *file;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
468
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
469 file = td->file_list->data;
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
470 buf = g_build_filename(entry_dir, file, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
471 if (isdir(buf))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
472 {
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
473 gchar *tmp = g_strconcat(buf, G_DIR_SEPARATOR_S, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
474 g_free(buf);
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
475 buf = tmp;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
476 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
477 gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
478 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(buf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
479 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
480 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
481
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
482 #ifdef TAB_COMPLETION_ENABLE_POPUP_MENU
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
483
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
484 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
485 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
486 tab_completion_popup_list(td, td->file_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
487 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
488 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
489
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
490 g_free(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
491 return home_exp;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
492 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
493 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
494 {
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
495 gchar *buf = g_strconcat(entry_dir, G_DIR_SEPARATOR_S, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
496 gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
497 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(buf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
498 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
499 g_free(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
500 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
501 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
502 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
503
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
504 ptr = (gchar *)filename_from_path(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
505 if (ptr > entry_dir) ptr--;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
506 ptr[0] = '\0';
1382
31a747f9d268 Fix tab completion when entering "/et[TAB]" it was changed to "et", this is fixed.
zas_
parents: 1371
diff changeset
507
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
508 if (strlen(entry_dir) == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
509 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
510 g_free(entry_dir);
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
511 entry_dir = g_strdup(G_DIR_SEPARATOR_S); /* FIXME: win32 */
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
512 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
513
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
514 if (isdir(entry_dir))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
515 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
516 GList *list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
517 GList *poss = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
518 gint l = strlen(entry_file);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
519
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
520 if (!td->dir_path || !td->file_list || strcmp(td->dir_path, entry_dir) != 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
521 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
522 tab_completion_read_dir(td, entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
523 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
524
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
525 list = td->file_list;
516
b7e99bfeadc9 Convert the minority of while() to while ().
zas_
parents: 475
diff changeset
526 while (list)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
527 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
528 gchar *file = list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
529 if (strncmp(entry_file, file, l) == 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
530 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
531 poss = g_list_prepend(poss, file);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
532 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
533 list = list->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
534 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
535
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
536 if (poss)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
537 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
538 if (!poss->next)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
539 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
540 gchar *file = poss->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
541 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
542
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
543 buf = g_build_filename(entry_dir, file, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
544 gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
545 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(buf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
546 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
547 g_list_free(poss);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
548 g_free(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
549 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
550 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
551 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
552 {
734
e6ebae313d46 Fix up some types, make some signed vs unsigned warnings quiet.
zas_
parents: 726
diff changeset
553 gsize c = strlen(entry_file);
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1388
diff changeset
554 gboolean done = FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
555 gchar *test_file = poss->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
556
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
557 while (!done)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
558 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
559 list = poss;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
560 if (!list) done = TRUE;
516
b7e99bfeadc9 Convert the minority of while() to while ().
zas_
parents: 475
diff changeset
561 while (list && !done)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
562 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
563 gchar *file = list->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
564 if (strlen(file) < c || strncmp(test_file, file, c) != 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
565 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
566 done = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
567 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
568 list = list->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
569 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
570 c++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
571 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
572 c -= 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
573 if (c > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
574 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
575 gchar *file;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
576 gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
577 file = g_strdup(test_file);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
578 file[c] = '\0';
722
9a145206ec2c tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
zas_
parents: 721
diff changeset
579 buf = g_build_filename(entry_dir, file, NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
580 gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
581 gtk_editable_set_position(GTK_EDITABLE(td->entry), strlen(buf));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
582
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
583 #ifdef TAB_COMPLETION_ENABLE_POPUP_MENU
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
584
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
585 poss = g_list_sort(poss, simple_sort);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
586 tab_completion_popup_list(td, poss);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
587
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
588 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
589
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
590 g_free(file);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
591 g_free(buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
592 g_list_free(poss);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
593 g_free(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
594 return TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
595 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
596 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
597 g_list_free(poss);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
598 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
599 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
600
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
601 g_free(entry_dir);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
602
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
603 return FALSE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
604 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
605
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
606 static gboolean tab_completion_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
607 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
608 TabCompData *td = data;
1437
a3d3208b0c50 gint -> gboolean.
zas_
parents: 1388
diff changeset
609 gboolean stop_signal = FALSE;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
610
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
611 switch (event->keyval)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
612 {
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 281
diff changeset
613 case GDK_Tab:
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
614 if (!(event->state & GDK_CONTROL_MASK))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
615 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
616 if (tab_completion_do(td))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
617 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
618 tab_completion_emit_tab_signal(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
619 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
620 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
621 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
622 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
623 case GDK_Return: case GDK_KP_Enter:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
624 if (td->fd_button &&
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
625 (event->state & GDK_CONTROL_MASK))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
626 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
627 tab_completion_select_show(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
628 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
629 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
630 else if (tab_completion_emit_enter_signal(td))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
631 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
632 stop_signal = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
633 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
634 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
635 default:
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
636 break;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
637 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
638
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
639 if (stop_signal) g_signal_stop_emission_by_name(G_OBJECT(widget), "key_press_event");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
640
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
641 return (stop_signal);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
642 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
643
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
644 static void tab_completion_button_pressed(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
645 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
646 TabCompData *td;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
647 GtkWidget *entry = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
648
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
649 td = g_object_get_data(G_OBJECT(entry), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
650
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
651 if (!td) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
652
1810
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
653 #if GTK_CHECK_VERSION(2,20,0)
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
654 if (!gtk_widget_has_focus(entry))
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
655 #else
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
656 if (!GTK_WIDGET_HAS_FOCUS(entry))
1810
c416d099a3dc GTK marks several functions as deprecated
mow
parents: 1802
diff changeset
657 #endif
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
658 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
659 gtk_widget_grab_focus(entry);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
660 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
661
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
662 if (tab_completion_do(td))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
663 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
664 tab_completion_emit_tab_signal(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
665 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
666 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
667
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
668 static void tab_completion_button_size_allocate(GtkWidget *button, GtkAllocation *allocation, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
669 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
670 GtkWidget *parent = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
671
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
672 if (allocation->height > parent->allocation.height)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
673 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
674 GtkAllocation button_allocation;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
675
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
676 button_allocation = button->allocation;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
677 button_allocation.height = parent->allocation.height;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
678 button_allocation.y = parent->allocation.y +
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
679 (parent->allocation.height - parent->allocation.height) / 2;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
680 gtk_widget_size_allocate(button, &button_allocation);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
681 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
682 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
683
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
684 static GtkWidget *tab_completion_create_complete_button(GtkWidget *entry, GtkWidget *parent)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
685 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
686 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
687 GtkWidget *icon;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
688 GdkPixbuf *pixbuf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
689
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
690 button = gtk_button_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
691 GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
692 g_signal_connect(G_OBJECT(button), "size_allocate",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
693 G_CALLBACK(tab_completion_button_size_allocate), parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
694 g_signal_connect(G_OBJECT(button), "clicked",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
695 G_CALLBACK(tab_completion_button_pressed), entry);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
696
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
697 pixbuf = gdk_pixbuf_new_from_inline(-1, icon_tabcomp, FALSE, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
698 icon = gtk_image_new_from_pixbuf(pixbuf);
1043
5fc64d6252e7 Replaced gtk depreceated code.
bruclik
parents: 1022
diff changeset
699 g_object_unref(pixbuf);
5fc64d6252e7 Replaced gtk depreceated code.
bruclik
parents: 1022
diff changeset
700
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
701 gtk_container_add(GTK_CONTAINER(button), icon);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
702 gtk_widget_show(icon);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
703
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
704 return button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
705 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
706
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
707 /*
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
708 *----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
709 * public interface
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
710 *----------------------------------------------------------------------------
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
711 */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
712
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
713 GtkWidget *tab_completion_new_with_history(GtkWidget **entry, const gchar *text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
714 const gchar *history_key, gint max_levels,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
715 void (*enter_func)(const gchar *, gpointer), gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
716 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
717 GtkWidget *box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
718 GtkWidget *combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
719 GtkWidget *combo_entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
720 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
721 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
722 TabCompData *td;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
723 gint n = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
724
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
725 box = gtk_hbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
726
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
727 combo = gtk_combo_box_entry_new_text();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
728 gtk_box_pack_start(GTK_BOX(box), combo, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
729 gtk_widget_show(combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
730
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
731 combo_entry = GTK_BIN(combo)->child;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
732 #if 0
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
733 gtk_combo_set_case_sensitive(GTK_COMBO(combo), TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
734 gtk_combo_set_use_arrows(GTK_COMBO(combo), FALSE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
735 #endif
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
736
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
737 button = tab_completion_create_complete_button(combo_entry, combo);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
738 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
739 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
740
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
741 tab_completion_add_to_entry(combo_entry, enter_func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
742
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
743 td = g_object_get_data(G_OBJECT(combo_entry), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
744 if (!td) return NULL; /* this should never happen! */
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
745
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
746 td->combo = combo;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
747 td->has_history = TRUE;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
748 td->history_key = g_strdup(history_key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
749 td->history_levels = max_levels;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
750
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
751 work = history_list_get_by_key(td->history_key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
752
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
753 work = history_list_get_by_key(history_key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
754 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
755 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
756 gtk_combo_box_append_text(GTK_COMBO_BOX(combo), (gchar *)work->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
757 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
758 n++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
759 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
760
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
761 if (text)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
762 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
763 gtk_entry_set_text(GTK_ENTRY(combo_entry), text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
764 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
765 else if (n > 0)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
766 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
767 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
768 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
769
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
770 if (entry) *entry = combo_entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
771 return box;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
772 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
773
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
774 const gchar *tab_completion_set_to_last_history(GtkWidget *entry)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
775 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
776 TabCompData *td = g_object_get_data(G_OBJECT(entry), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
777 const gchar *buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
778
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
779 if (!td || !td->has_history) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
780
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
781 buf = history_list_find_last_path_by_key(td->history_key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
782 if (buf)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
783 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
784 gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
785 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
786
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
787 return buf;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
788 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
789
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
790 void tab_completion_append_to_history(GtkWidget *entry, const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
791 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
792 TabCompData *td;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
793 GtkTreeModel *store;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
794 GList *work;
1167
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
795 gint n = 0;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
796
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
797 td = g_object_get_data(G_OBJECT(entry), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
798
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
799 if (!path) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
800
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
801 if (!td || !td->has_history) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
802
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
803 history_list_add_to_key(td->history_key, path, td->history_levels);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
804
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
805 gtk_combo_box_set_active(GTK_COMBO_BOX(td->combo), -1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
806
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
807 store = gtk_combo_box_get_model(GTK_COMBO_BOX(td->combo));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
808 gtk_list_store_clear(GTK_LIST_STORE(store));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
809
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
810 work = history_list_get_by_key(td->history_key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
811 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
812 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
813 gtk_combo_box_append_text(GTK_COMBO_BOX(td->combo), (gchar *)work->data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
814 work = work->next;
1167
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
815 n++;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
816 }
1167
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
817
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
818 if (td->tab_append_func) {
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
819 td->tab_append_func(path, td->tab_append_data, n);
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
820 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
821 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
822
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
823 GtkWidget *tab_completion_new(GtkWidget **entry, const gchar *text,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
824 void (*enter_func)(const gchar *, gpointer), gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
825 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
826 GtkWidget *hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
827 GtkWidget *button;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
828 GtkWidget *newentry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
829
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
830 hbox = gtk_hbox_new(FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
831
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
832 newentry = gtk_entry_new();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
833 if (text) gtk_entry_set_text(GTK_ENTRY(newentry), text);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
834 gtk_box_pack_start(GTK_BOX(hbox), newentry, TRUE, TRUE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
835 gtk_widget_show(newentry);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
836
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
837 button = tab_completion_create_complete_button(newentry, newentry);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
838 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
839 gtk_widget_show(button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
840
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
841 tab_completion_add_to_entry(newentry, enter_func, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
842
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
843 if (entry) *entry = newentry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
844 return hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
845 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
846
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
847 void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(const gchar *, gpointer), gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
848 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
849 TabCompData *td;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
850 if (!entry)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
851 {
673
fbebf5cf4a55 Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents: 516
diff changeset
852 log_printf("Tab completion error: entry != NULL\n");
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
853 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
854 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
855
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
856 td = g_new0(TabCompData, 1);
1365
249bf204004a When g_new0() is used, drop redundant initializations to NULL, FALSE or 0.
zas_
parents: 1284
diff changeset
857
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
858 td->entry = entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
859 td->enter_func = enter_func;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
860 td->enter_data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
861
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
862 g_object_set_data(G_OBJECT(td->entry), "tab_completion_data", td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
863
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
864 g_signal_connect(G_OBJECT(entry), "key_press_event",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
865 G_CALLBACK(tab_completion_key_pressed), td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
866 g_signal_connect(G_OBJECT(entry), "destroy",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
867 G_CALLBACK(tab_completion_destroy), td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
868 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
869
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
870 void tab_completion_add_tab_func(GtkWidget *entry, void (*tab_func)(const gchar *, gpointer), gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
871 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
872 TabCompData *td = g_object_get_data(G_OBJECT(entry), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
873
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
874 if (!td) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
875
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
876 td->tab_func = tab_func;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
877 td->tab_data = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
878 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
879
1167
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
880 /* Add a callback function called when a new entry is appended to the list */
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
881 void tab_completion_add_append_func(GtkWidget *entry, void (*tab_append_func)(const gchar *, gpointer, gint), gpointer data)
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
882 {
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
883 TabCompData *td = g_object_get_data(G_OBJECT(entry), "tab_completion_data");
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
884
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
885 if (!td) return;
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
886
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
887 td->tab_append_func = tab_append_func;
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
888 td->tab_append_data = data;
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
889 }
e812b1a7adda Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
zas_
parents: 1055
diff changeset
890
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
891 gchar *remove_trailing_slash(const gchar *path)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
892 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
893 gint l;
260
249a9a6cd27f Improve remove_trailing_slash() so it allocates no more than
zas_
parents: 254
diff changeset
894
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
895 if (!path) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
896
260
249a9a6cd27f Improve remove_trailing_slash() so it allocates no more than
zas_
parents: 254
diff changeset
897 l = strlen(path);
726
a1dcef8cd1ae Use G_DIR_SEPARATOR where applicable.
zas_
parents: 722
diff changeset
898 while (l > 1 && path[l - 1] == G_DIR_SEPARATOR) l--;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
899
260
249a9a6cd27f Improve remove_trailing_slash() so it allocates no more than
zas_
parents: 254
diff changeset
900 return g_strndup(path, l);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
901 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
902
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
903 static void tab_completion_select_cancel_cb(FileDialog *fd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
904 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
905 TabCompData *td = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
906
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
907 td->fd = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
908 file_dialog_close(fd);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
909 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
910
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
911 static void tab_completion_select_ok_cb(FileDialog *fd, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
912 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
913 TabCompData *td = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
914
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
915 gtk_entry_set_text(GTK_ENTRY(td->entry), gtk_entry_get_text(GTK_ENTRY(fd->entry)));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
916
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
917 tab_completion_select_cancel_cb(fd, data);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
918
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
919 tab_completion_emit_enter_signal(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
920 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
921
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
922 static void tab_completion_select_show(TabCompData *td)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
923 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
924 const gchar *title;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
925 const gchar *path;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
926
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
927 if (td->fd)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
928 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
929 gtk_window_present(GTK_WINDOW(GENERIC_DIALOG(td->fd)->dialog));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
930 return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
931 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
932
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
933 title = (td->fd_title) ? td->fd_title : _("Select path");
1174
0bea79d87065 Drop useless wmclass stuff. Gtk will take care of it and as said in the documentation using gtk_window_set_wmclass() is sort of pointless.
zas_
parents: 1167
diff changeset
934 td->fd = file_dialog_new(title, "select_path", td->entry,
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
935 tab_completion_select_cancel_cb, td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
936 file_dialog_add_button(td->fd, GTK_STOCK_OK, NULL,
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
937 tab_completion_select_ok_cb, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
938
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
939 generic_dialog_add_message(GENERIC_DIALOG(td->fd), NULL, title, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
940
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
941 path = gtk_entry_get_text(GTK_ENTRY(td->entry));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
942 if (strlen(path) == 0) path = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
943 if (td->fd_folders_only)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
944 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
945 file_dialog_add_path_widgets(td->fd, NULL, path, td->history_key, NULL, NULL);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
946 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
947 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
948 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
949 file_dialog_add_path_widgets(td->fd, NULL, path, td->history_key, "*", _("All files"));
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
950 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
951
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
952 gtk_widget_show(GENERIC_DIALOG(td->fd)->dialog);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
953 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
954
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
955 static void tab_completion_select_pressed(GtkWidget *widget, gpointer data)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
956 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
957 TabCompData *td = data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
958
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
959 tab_completion_select_show(td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
960 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
961
1448
89dedc61b1bd gint -> gboolean.
zas_
parents: 1437
diff changeset
962 void tab_completion_add_select_button(GtkWidget *entry, const gchar *title, gboolean folders_only)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
963 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
964 TabCompData *td;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
965 GtkWidget *parent;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
966 GtkWidget *hbox;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
967
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
968 td = g_object_get_data(G_OBJECT(entry), "tab_completion_data");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
969
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
970 if (!td) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
971
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
972 g_free(td->fd_title);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
973 td->fd_title = g_strdup(title);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
974 td->fd_folders_only = folders_only;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
975
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
976 if (td->fd_button) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
977
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
978 parent = (td->combo) ? td->combo : td->entry;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
979
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
980 hbox = gtk_widget_get_parent(parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
981 if (!GTK_IS_BOX(hbox)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
982
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
983 td->fd_button = gtk_button_new_with_label("...");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
984 g_signal_connect(G_OBJECT(td->fd_button), "size_allocate",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
985 G_CALLBACK(tab_completion_button_size_allocate), parent);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
986 g_signal_connect(G_OBJECT(td->fd_button), "clicked",
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
987 G_CALLBACK(tab_completion_select_pressed), td);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
988
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
989 gtk_box_pack_start(GTK_BOX(hbox), td->fd_button, FALSE, FALSE, 0);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
990
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
991 gtk_widget_show(td->fd_button);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents:
diff changeset
992 }
1055
1646720364cf Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents: 1043
diff changeset
993 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */