annotate src/gtkutil.c @ 87649:107ccd98fa12

Merge from emacs--rel--22 Revision: emacs@sv.gnu.org/emacs--devo--0--patch-987
author Miles Bader <miles@gnu.org>
date Tue, 08 Jan 2008 20:46:54 +0000
parents f0601f6fb8b0 fc2bcd2a8aad
children 606f2d163a64 370f67c176eb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1 /* Functions for creating and updating GTK widgets.
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 79460
diff changeset
2 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 79460
diff changeset
3 Free Software Foundation, Inc.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
5 This file is part of GNU Emacs.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
6
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
78260
922696f363b0 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 77511
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
10 any later version.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
11
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
15 GNU General Public License for more details.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
16
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60553
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60553
diff changeset
20 Boston, MA 02110-1301, USA. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
21
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
22 #include "config.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
23
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
24 #ifdef USE_GTK
49359
14cf50ecf91a gtkutil.c: Must include stdio.h before termhooks.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 49325
diff changeset
25 #include <string.h>
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
26 #include <signal.h>
49359
14cf50ecf91a gtkutil.c: Must include stdio.h before termhooks.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 49325
diff changeset
27 #include <stdio.h>
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
28 #include "lisp.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
29 #include "xterm.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
30 #include "blockinput.h"
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
31 #include "syssignal.h"
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
32 #include "window.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
33 #include "atimer.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
34 #include "gtkutil.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
35 #include "termhooks.h"
51408
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
36 #include "keyboard.h"
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
37 #include "charset.h"
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
38 #include "coding.h"
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
39 #include <gdk/gdkkeysyms.h>
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
40
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
41
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
42 #define FRAME_TOTAL_PIXEL_HEIGHT(f) \
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
43 (FRAME_PIXEL_HEIGHT (f) + FRAME_MENUBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f))
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
44
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
45 /* Avoid "differ in sign" warnings */
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
46 #define SSDATA(x) ((char *) SDATA (x))
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
47
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
48
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
49 /***********************************************************************
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
50 Display handling functions
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
51 ***********************************************************************/
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
52
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
53 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
54
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
55 /* Gtk does not work well without any display open. Emacs may close
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
56 all its displays. In that case, keep a display around just for
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
57 the purpose of having one. */
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
58
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
59 static GdkDisplay *gdpy_def;
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
60
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
61
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
62 /* Return the GdkDisplay that corresponds to the X display DPY. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
63
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
64 static GdkDisplay *
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
65 xg_get_gdk_display (dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
66 Display *dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
67 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
68 return gdk_x11_lookup_xdisplay (dpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
69 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
70
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
71 /* When the GTK widget W is to be created on a display for F that
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
72 is not the default display, set the display for W.
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
73 W can be a GtkMenu or a GtkWindow widget. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
74
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
75 static void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
76 xg_set_screen (w, f)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
77 GtkWidget *w;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
78 FRAME_PTR f;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
79 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
80 if (FRAME_X_DISPLAY (f) != GDK_DISPLAY ())
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
81 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
82 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
83 GdkScreen *gscreen = gdk_display_get_default_screen (gdpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
84
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
85 if (GTK_IS_MENU (w))
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
86 gtk_menu_set_screen (GTK_MENU (w), gscreen);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
87 else
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
88 gtk_window_set_screen (GTK_WINDOW (w), gscreen);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
89 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
90 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
91
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
92
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
93 #else /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
94
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
95 /* Make some defines so we can use the GTK 2.2 functions when
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
96 compiling with GTK 2.0. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
97
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
98 #define xg_set_screen(w, f)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
99 #define gdk_xid_table_lookup_for_display(dpy, w) gdk_xid_table_lookup (w)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
100 #define gdk_pixmap_foreign_new_for_display(dpy, p) gdk_pixmap_foreign_new (p)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
101 #define gdk_cursor_new_for_display(dpy, c) gdk_cursor_new (c)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
102 #define gdk_x11_lookup_xdisplay(dpy) 0
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
103 #define GdkDisplay void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
104
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
105 #endif /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
106
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
107 /* Open a display named by DISPLAY_NAME. The display is returned in *DPY.
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
108 *DPY is set to NULL if the display can't be opened.
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
109
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
110 Returns non-zero if display could be opened, zero if display could not
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
111 be opened, and less than zero if the GTK version doesn't support
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
112 multipe displays. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
113
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
114 int
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
115 xg_display_open (display_name, dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
116 char *display_name;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
117 Display **dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
118 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
119 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
120 GdkDisplay *gdpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
121
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
122 gdpy = gdk_display_open (display_name);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
123 *dpy = gdpy ? GDK_DISPLAY_XDISPLAY (gdpy) : NULL;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
124
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
125 return gdpy != NULL;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
126
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
127 #else /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
128
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
129 return -1;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
130 #endif /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
131 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
132
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
133
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
134 /* Close display DPY. */
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
135
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
136 void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
137 xg_display_close (Display *dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
138 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
139 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
140 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
141
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
142 /* If this is the default display, we must change it before calling
72778
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
143 dispose, otherwise it will crash on some Gtk+ versions. */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
144 if (gdk_display_get_default () == gdpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
145 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
146 struct x_display_info *dpyinfo;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
147 Display *new_dpy = 0;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
148 GdkDisplay *gdpy_new;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
149
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
150 /* Find another display. */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
151 for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
152 if (dpyinfo->display != dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
153 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
154 new_dpy = dpyinfo->display;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
155 break;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
156 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
157
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
158 if (new_dpy)
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
159 gdpy_new = gdk_x11_lookup_xdisplay (new_dpy);
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
160 else
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
161 {
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
162 if (!gdpy_def)
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
163 gdpy_def = gdk_display_open (gdk_display_get_name (gdpy));
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
164 gdpy_new = gdpy_def;
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
165 }
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
166
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
167 gdk_display_manager_set_default_display (gdk_display_manager_get (),
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
168 gdpy_new);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
169 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
170
72778
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
171 /* GTK 2.2-2.8 has a bug that makes gdk_display_close crash (bug
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
172 http://bugzilla.gnome.org/show_bug.cgi?id=85715). This way
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
173 we can continue running, but there will be memory leaks. */
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
174
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
175 #if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 10
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
176 g_object_run_dispose (G_OBJECT (gdpy));
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
177 #else
72778
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
178 /* This seems to be fixed in GTK 2.10. */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
179 gdk_display_close (gdpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
180 #endif
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
181 #endif /* HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
182 }
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
183
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
184
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
185 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
186 Utility functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
187 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
188 /* The timer for scroll bar repetition and menu bar timeouts.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
189 NULL if no timer is started. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
190 static struct atimer *xg_timer;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
191
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
192
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
193 /* The next two variables and functions are taken from lwlib. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
194 static widget_value *widget_value_free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
195 static int malloc_cpt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
196
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
197 /* Allocate a widget_value structure, either by taking one from the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
198 widget_value_free_list or by malloc:ing a new one.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
199
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
200 Return a pointer to the allocated structure. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
201
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
202 widget_value *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
203 malloc_widget_value ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
204 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
205 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
206 if (widget_value_free_list)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
207 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
208 wv = widget_value_free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
209 widget_value_free_list = wv->free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
210 wv->free_list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
211 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
212 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
213 {
69025
5d9232b72d14 (malloc_widget_value): Use xmalloc.
Richard M. Stallman <rms@gnu.org>
parents: 68922
diff changeset
214 wv = (widget_value *) xmalloc (sizeof (widget_value));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
215 malloc_cpt++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
216 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
217 memset (wv, 0, sizeof (widget_value));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
218 return wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
219 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
220
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
221 /* This is analogous to free. It frees only what was allocated
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
222 by malloc_widget_value, and no substructures. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
223
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
224 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
225 free_widget_value (wv)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
226 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
227 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
228 if (wv->free_list)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
229 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
230
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
231 if (malloc_cpt > 25)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
232 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
233 /* When the number of already allocated cells is too big,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
234 We free it. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
235 free (wv);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
236 malloc_cpt--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
237 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
238 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
239 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
240 wv->free_list = widget_value_free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
241 widget_value_free_list = wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
242 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
243 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
244
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
245
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
246 /* Create and return the cursor to be used for popup menus and
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
247 scroll bars on display DPY. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
248
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
249 GdkCursor *
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
250 xg_create_default_cursor (dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
251 Display *dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
252 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
253 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (dpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
254 return gdk_cursor_new_for_display (gdpy, GDK_LEFT_PTR);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
255 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
256
64936
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
257 /* Apply GMASK to GPIX and return a GdkPixbuf with an alpha channel. */
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
258
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
259 static GdkPixbuf *
64936
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
260 xg_get_pixbuf_from_pix_and_mask (gpix, gmask, cmap)
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
261 GdkPixmap *gpix;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
262 GdkPixmap *gmask;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
263 GdkColormap *cmap;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
264 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
265 int x, y, width, height, rowstride, mask_rowstride;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
266 GdkPixbuf *icon_buf, *tmp_buf;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
267 guchar *pixels;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
268 guchar *mask_pixels;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
269
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
270 gdk_drawable_get_size (gpix, &width, &height);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
271 tmp_buf = gdk_pixbuf_get_from_drawable (NULL, gpix, cmap,
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
272 0, 0, 0, 0, width, height);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
273 icon_buf = gdk_pixbuf_add_alpha (tmp_buf, FALSE, 0, 0, 0);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
274 g_object_unref (G_OBJECT (tmp_buf));
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
275
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
276 if (gmask)
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
277 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
278 GdkPixbuf *mask_buf = gdk_pixbuf_get_from_drawable (NULL,
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
279 gmask,
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
280 NULL,
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
281 0, 0, 0, 0,
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
282 width, height);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
283 guchar *pixels = gdk_pixbuf_get_pixels (icon_buf);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
284 guchar *mask_pixels = gdk_pixbuf_get_pixels (mask_buf);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
285 int rowstride = gdk_pixbuf_get_rowstride (icon_buf);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
286 int mask_rowstride = gdk_pixbuf_get_rowstride (mask_buf);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
287 int y;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
288
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
289 for (y = 0; y < height; ++y)
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
290 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
291 guchar *iconptr, *maskptr;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
292 int x;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
293
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
294 iconptr = pixels + y * rowstride;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
295 maskptr = mask_pixels + y * mask_rowstride;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
296
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
297 for (x = 0; x < width; ++x)
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
298 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
299 /* In a bitmap, RGB is either 255/255/255 or 0/0/0. Checking
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
300 just R is sufficient. */
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
301 if (maskptr[0] == 0)
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
302 iconptr[3] = 0; /* 0, 1, 2 is R, G, B. 3 is alpha. */
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
303
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
304 iconptr += rowstride/width;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
305 maskptr += mask_rowstride/width;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
306 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
307 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
308
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
309 g_object_unref (G_OBJECT (mask_buf));
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
310 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
311
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
312 return icon_buf;
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
313 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
314
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
315 static Lisp_Object
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
316 file_for_image(image)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
317 Lisp_Object image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
318 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
319 Lisp_Object specified_file = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
320 Lisp_Object tail;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
321 extern Lisp_Object QCfile;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
322
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
323 for (tail = XCDR (image);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
324 NILP (specified_file) && CONSP (tail) && CONSP (XCDR (tail));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
325 tail = XCDR (XCDR (tail)))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
326 if (EQ (XCAR (tail), QCfile))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
327 specified_file = XCAR (XCDR (tail));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
328
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
329 return specified_file;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
330 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
331
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
332 /* For the image defined in IMG, make and return a GtkImage. For displays with
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
333 8 planes or less we must make a GdkPixbuf and apply the mask manually.
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
334 Otherwise the highlightning and dimming the tool bar code in GTK does
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
335 will look bad. For display with more than 8 planes we just use the
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
336 pixmap and mask directly. For monochrome displays, GTK doesn't seem
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
337 able to use external pixmaps, it looks bad whatever we do.
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
338 The image is defined on the display where frame F is.
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
339 WIDGET is used to find the GdkColormap to use for the GdkPixbuf.
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
340 If OLD_WIDGET is NULL, a new widget is constructed and returned.
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
341 If OLD_WIDGET is not NULL, that widget is modified. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
342
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
343 static GtkWidget *
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
344 xg_get_image_for_pixmap (f, img, widget, old_widget)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
345 FRAME_PTR f;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
346 struct image *img;
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
347 GtkWidget *widget;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
348 GtkImage *old_widget;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
349 {
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
350 GdkPixmap *gpix;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
351 GdkPixmap *gmask;
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
352 GdkDisplay *gdpy;
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
353 GdkColormap *cmap;
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
354 GdkPixbuf *icon_buf;
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
355
68027
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
356 /* If we have a file, let GTK do all the image handling.
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
357 This seems to be the only way to make insensitive and activated icons
68027
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
358 look good in all cases. */
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
359 Lisp_Object specified_file = file_for_image (img->spec);
69141
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
360 Lisp_Object file;
68027
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
361
69141
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
362 /* We already loaded the image once before calling this
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
363 function, so this only fails if the image file has been removed.
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
364 In that case, use the pixmap already loaded. */
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
365
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
366 if (STRINGP (specified_file)
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
367 && STRINGP (file = x_find_image_file (specified_file)))
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
368 {
68027
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
369 if (! old_widget)
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
370 old_widget = GTK_IMAGE (gtk_image_new_from_file (SSDATA (file)));
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
371 else
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
372 gtk_image_set_from_file (old_widget, SSDATA (file));
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
373
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
374 return GTK_WIDGET (old_widget);
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
375 }
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
376
68027
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
377 /* No file, do the image handling ourselves. This will look very bad
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
378 on a monochrome display, and sometimes bad on all displays with
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
379 certain themes. */
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
380
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
381 gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
382 gpix = gdk_pixmap_foreign_new_for_display (gdpy, img->pixmap);
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
383 gmask = img->mask ? gdk_pixmap_foreign_new_for_display (gdpy, img->mask) : 0;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
384
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
385 /* This is a workaround to make icons look good on pseudo color
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
386 displays. Apparently GTK expects the images to have an alpha
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
387 channel. If they don't, insensitive and activated icons will
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
388 look bad. This workaround does not work on monochrome displays,
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
389 and is strictly not needed on true color/static color displays (i.e.
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
390 16 bits and higher). But we do it anyway so we get a pixbuf that is
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
391 not associated with the img->pixmap. The img->pixmap may be removed
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
392 by clearing the image cache and then the tool bar redraw fails, since
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
393 Gtk+ assumes the pixmap is always there. */
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
394 cmap = gtk_widget_get_colormap (widget);
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
395 icon_buf = xg_get_pixbuf_from_pix_and_mask (gpix, gmask, cmap);
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
396
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
397 if (! old_widget)
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
398 old_widget = GTK_IMAGE (gtk_image_new_from_pixbuf (icon_buf));
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
399 else
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
400 gtk_image_set_from_pixbuf (old_widget, icon_buf);
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
401
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
402 g_object_unref (G_OBJECT (icon_buf));
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
403
56268
9853134cd610 * gtkutil.c (xg_get_image_for_pixmap): Call g_object_unref on
Jan Djärv <jan.h.d@swipnet.se>
parents: 56112
diff changeset
404 g_object_unref (G_OBJECT (gpix));
9853134cd610 * gtkutil.c (xg_get_image_for_pixmap): Call g_object_unref on
Jan Djärv <jan.h.d@swipnet.se>
parents: 56112
diff changeset
405 if (gmask) g_object_unref (G_OBJECT (gmask));
9853134cd610 * gtkutil.c (xg_get_image_for_pixmap): Call g_object_unref on
Jan Djärv <jan.h.d@swipnet.se>
parents: 56112
diff changeset
406
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
407 return GTK_WIDGET (old_widget);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
408 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
409
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
410
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
411 /* Set CURSOR on W and all widgets W contain. We must do like this
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
412 for scroll bars and menu because they create widgets internally,
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
413 and it is those widgets that are visible. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
414
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
415 static void
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
416 xg_set_cursor (w, cursor)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
417 GtkWidget *w;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
418 GdkCursor *cursor;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
419 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
420 GList *children = gdk_window_peek_children (w->window);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
421
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
422 gdk_window_set_cursor (w->window, cursor);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
423
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
424 /* The scroll bar widget has more than one GDK window (had to look at
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
425 the source to figure this out), and there is no way to set cursor
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
426 on widgets in GTK. So we must set the cursor for all GDK windows.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
427 Ditto for menus. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
428
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
429 for ( ; children; children = g_list_next (children))
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
430 gdk_window_set_cursor (GDK_WINDOW (children->data), cursor);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
431 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
432
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
433 /* Timer function called when a timeout occurs for xg_timer.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
434 This function processes all GTK events in a recursive event loop.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
435 This is done because GTK timer events are not seen by Emacs event
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
436 detection, Emacs only looks for X events. When a scroll bar has the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
437 pointer (detected by button press/release events below) an Emacs
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
438 timer is started, and this function can then check if the GTK timer
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
439 has expired by calling the GTK event loop.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
440 Also, when a menu is active, it has a small timeout before it
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
441 pops down the sub menu under it. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
442
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
443 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
444 xg_process_timeouts (timer)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
445 struct atimer *timer;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
446 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
447 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
448 /* Ideally we would like to just handle timer events, like the Xt version
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
449 of this does in xterm.c, but there is no such feature in GTK. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
450 while (gtk_events_pending ())
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
451 gtk_main_iteration ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
452 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
453 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
454
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
455 /* Start the xg_timer with an interval of 0.1 seconds, if not already started.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
456 xg_process_timeouts is called when the timer expires. The timer
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
457 started is continuous, i.e. runs until xg_stop_timer is called. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
458
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
459 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
460 xg_start_timer ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
461 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
462 if (! xg_timer)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
463 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
464 EMACS_TIME interval;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
465 EMACS_SET_SECS_USECS (interval, 0, 100000);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
466 xg_timer = start_atimer (ATIMER_CONTINUOUS,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
467 interval,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
468 xg_process_timeouts,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
469 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
470 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
471 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
472
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
473 /* Stop the xg_timer if started. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
474
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
475 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
476 xg_stop_timer ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
477 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
478 if (xg_timer)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
479 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
480 cancel_atimer (xg_timer);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
481 xg_timer = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
482 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
483 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
484
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
485 /* Insert NODE into linked LIST. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
486
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
487 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
488 xg_list_insert (xg_list_node *list, xg_list_node *node)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
489 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
490 xg_list_node *list_start = list->next;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
491
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
492 if (list_start) list_start->prev = node;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
493 node->next = list_start;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
494 node->prev = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
495 list->next = node;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
496 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
497
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
498 /* Remove NODE from linked LIST. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
499
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
500 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
501 xg_list_remove (xg_list_node *list, xg_list_node *node)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
502 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
503 xg_list_node *list_start = list->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
504 if (node == list_start)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
505 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
506 list->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
507 if (list->next) list->next->prev = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
508 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
509 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
510 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
511 node->prev->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
512 if (node->next) node->next->prev = node->prev;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
513 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
514 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
515
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
516 /* Allocate and return a utf8 version of STR. If STR is already
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
517 utf8 or NULL, just return STR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
518 If not, a new string is allocated and the caller must free the result
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
519 with g_free. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
520
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
521 static char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
522 get_utf8_string (str)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
523 char *str;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
524 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
525 char *utf8_str = str;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
526
72928
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
527 if (!str) return NULL;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
528
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
529 /* If not UTF-8, try current locale. */
72928
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
530 if (!g_utf8_validate (str, -1, NULL))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
531 utf8_str = g_locale_to_utf8 (str, -1, 0, 0, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
532
72928
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
533 if (!utf8_str)
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
534 {
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
535 /* Probably some control characters in str. Escape them. */
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
536 size_t nr_bad = 0;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
537 gsize bytes_read;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
538 gsize bytes_written;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
539 unsigned char *p = (unsigned char *)str;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
540 char *cp, *up;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
541 GError *error = NULL;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
542
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
543 while (! (cp = g_locale_to_utf8 ((char *)p, -1, &bytes_read,
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
544 &bytes_written, &error))
72928
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
545 && error->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE)
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
546 {
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
547 ++nr_bad;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
548 p += bytes_written+1;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
549 g_error_free (error);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
550 error = NULL;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
551 }
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
552
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
553 if (error)
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
554 {
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
555 g_error_free (error);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
556 error = NULL;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
557 }
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
558 if (cp) g_free (cp);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
559
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
560 up = utf8_str = xmalloc (strlen (str) + nr_bad * 4 + 1);
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
561 p = (unsigned char *)str;
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
562
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
563 while (! (cp = g_locale_to_utf8 ((char *)p, -1, &bytes_read,
72928
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
564 &bytes_written, &error))
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
565 && error->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE)
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
566 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
567 strncpy (up, (char *)p, bytes_written);
72928
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
568 sprintf (up + bytes_written, "\\%03o", p[bytes_written]);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
569 up[bytes_written+4] = '\0';
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
570 up += bytes_written+4;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
571 p += bytes_written+1;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
572 g_error_free (error);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
573 error = NULL;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
574 }
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
575
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
576 if (cp)
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
577 {
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
578 strcat (utf8_str, cp);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
579 g_free (cp);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
580 }
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
581 if (error)
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
582 {
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
583 g_error_free (error);
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
584 error = NULL;
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
585 }
790e14d9baae * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
Jan Djärv <jan.h.d@swipnet.se>
parents: 72778
diff changeset
586 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
587 return utf8_str;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
588 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
589
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
590
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
591
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
592 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
593 General functions for creating widgets, resizing, events, e.t.c.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
594 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
595
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
596 /* Make a geometry string and pass that to GTK. It seems this is the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
597 only way to get geometry position right if the user explicitly
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
598 asked for a position when starting Emacs.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
599 F is the frame we shall set geometry for. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
600
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
601 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
602 xg_set_geometry (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
603 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
604 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
605 if (f->size_hint_flags & USPosition)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
606 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
607 int left = f->left_pos;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
608 int xneg = f->size_hint_flags & XNegative;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
609 int top = f->top_pos;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
610 int yneg = f->size_hint_flags & YNegative;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
611 char geom_str[32];
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
612
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
613 if (xneg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
614 left = -left;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
615 if (yneg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
616 top = -top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
617
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
618 sprintf (geom_str, "=%dx%d%c%d%c%d",
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
619 FRAME_PIXEL_WIDTH (f),
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
620 FRAME_TOTAL_PIXEL_HEIGHT (f),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
621 (xneg ? '-' : '+'), left,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
622 (yneg ? '-' : '+'), top);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
623
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
624 if (!gtk_window_parse_geometry (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
625 geom_str))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
626 fprintf (stderr, "Failed to parse: '%s'\n", geom_str);
65628
a998f173b21a * gtkutil.c (xg_set_geometry): Do a gtk_window_move if program
Jan Djärv <jan.h.d@swipnet.se>
parents: 65006
diff changeset
627 } else if (f->size_hint_flags & PPosition) {
a998f173b21a * gtkutil.c (xg_set_geometry): Do a gtk_window_move if program
Jan Djärv <jan.h.d@swipnet.se>
parents: 65006
diff changeset
628 gtk_window_move (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
a998f173b21a * gtkutil.c (xg_set_geometry): Do a gtk_window_move if program
Jan Djärv <jan.h.d@swipnet.se>
parents: 65006
diff changeset
629 f->left_pos, f->top_pos);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
630 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
631 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
632
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
633
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
634 /* Resize the outer window of frame F after chainging the height.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
635 This happend when the menu bar or the tool bar is added or removed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
636 COLUMNS/ROWS is the size the edit area shall have after the resize. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
637
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
638 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
639 xg_resize_outer_widget (f, columns, rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
640 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
641 int columns;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
642 int rows;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
643 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
644 /* If we are not mapped yet, set geometry once again, as window
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
645 height now have changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
646 if (! GTK_WIDGET_MAPPED (FRAME_GTK_OUTER_WIDGET (f)))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
647 xg_set_geometry (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
648
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
649 xg_frame_set_char_size (f, columns, rows);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
650 gdk_window_process_all_updates ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
651 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
652
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
653 /* Function to handle resize of our widgets. Since Emacs has some layouts
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
654 that does not fit well with GTK standard containers, we do most layout
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
655 manually.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
656 F is the frame to resize.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
657 PIXELWIDTH, PIXELHEIGHT is the new size in pixels. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
658
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
659 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
660 xg_resize_widgets (f, pixelwidth, pixelheight)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
661 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
662 int pixelwidth, pixelheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
663 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
664 int mbheight = FRAME_MENUBAR_HEIGHT (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
665 int tbheight = FRAME_TOOLBAR_HEIGHT (f);
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
666 int rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, (pixelheight
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
667 - mbheight - tbheight));
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
668 int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixelwidth);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
669
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
670 if (FRAME_GTK_WIDGET (f)
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
671 && (columns != FRAME_COLS (f)
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
672 || rows != FRAME_LINES (f)
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
673 || pixelwidth != FRAME_PIXEL_WIDTH (f)
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
674 || pixelheight != FRAME_PIXEL_HEIGHT (f)))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
675 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
676 struct x_output *x = f->output_data.x;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
677 GtkAllocation all;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
678
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
679 all.y = mbheight + tbheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
680 all.x = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
681
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
682 all.width = pixelwidth;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
683 all.height = pixelheight - mbheight - tbheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
684
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
685 gtk_widget_size_allocate (x->edit_widget, &all);
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
686
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
687 change_frame_size (f, rows, columns, 0, 1, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
688 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
689 cancel_mouse_face (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
690 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
691 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
692
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
693
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
694 /* Update our widget size to be COLS/ROWS characters for frame F. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
695
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
696 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
697 xg_frame_set_char_size (f, cols, rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
698 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
699 int cols;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
700 int rows;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
701 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
702 int pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, rows)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
703 + FRAME_MENUBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f);
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
704 int pixelwidth;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
705
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
706 /* Take into account the size of the scroll bar. Always use the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
707 number of columns occupied by the scroll bar here otherwise we
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
708 might end up with a frame width that is not a multiple of the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
709 frame's character width which is bad for vertically split
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
710 windows. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
711 f->scroll_bar_actual_width
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
712 = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
713
50099
a62497b91c74 Use generic compute_fringe_widths.
Kim F. Storm <storm@cua.dk>
parents: 50063
diff changeset
714 compute_fringe_widths (f, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
715
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
716 /* FRAME_TEXT_COLS_TO_PIXEL_WIDTH uses scroll_bar_actual_width, so call it
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
717 after calculating that value. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
718 pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, cols);
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
719
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
720 /* Must resize our top level widget. Font size may have changed,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
721 but not rows/cols. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
722 gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
723 pixelwidth, pixelheight);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
724 xg_resize_widgets (f, pixelwidth, pixelheight);
53275
a07a0bae1990 * gtkutil.c (xg_frame_set_char_size): Call x_wm_set_size_hint.
Jan Djärv <jan.h.d@swipnet.se>
parents: 53069
diff changeset
725 x_wm_set_size_hint (f, 0, 0);
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
726 SET_FRAME_GARBAGED (f);
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
727 cancel_mouse_face (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
728 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
729
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
730 /* Convert an X Window WSESC on display DPY to its corresponding GtkWidget.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
731 Must be done like this, because GtkWidget:s can have "hidden"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
732 X Window that aren't accessible.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
733
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
734 Return 0 if no widget match WDESC. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
735
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
736 GtkWidget *
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
737 xg_win_to_widget (dpy, wdesc)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
738 Display *dpy;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
739 Window wdesc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
740 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
741 gpointer gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
742 GtkWidget *gwdesc = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
743
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
744 BLOCK_INPUT;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
745
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
746 gdkwin = gdk_xid_table_lookup_for_display (gdk_x11_lookup_xdisplay (dpy),
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
747 wdesc);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
748 if (gdkwin)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
749 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
750 GdkEvent event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
751 event.any.window = gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
752 gwdesc = gtk_get_event_widget (&event);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
753 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
754
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
755 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
756 return gwdesc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
757 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
758
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
759 /* Fill in the GdkColor C so that it represents PIXEL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
760 W is the widget that color will be used for. Used to find colormap. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
761
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
762 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
763 xg_pix_to_gcolor (w, pixel, c)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
764 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
765 unsigned long pixel;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
766 GdkColor *c;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
767 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
768 GdkColormap *map = gtk_widget_get_colormap (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
769 gdk_colormap_query_color (map, pixel, c);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
770 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
771
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
772 /* Create and set up the GTK widgets for frame F.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
773 Return 0 if creation failed, non-zero otherwise. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
774
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
775 int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
776 xg_create_frame_widgets (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
777 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
778 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
779 GtkWidget *wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
780 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
781 GtkWidget *wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
782 GdkColor bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
783 GtkRcStyle *style;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
784 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
785 char *title = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
786
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
787 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
788
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
789 wtop = gtk_window_new (GTK_WINDOW_TOPLEVEL);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
790 xg_set_screen (wtop, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
791
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
792 wvbox = gtk_vbox_new (FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
793 wfixed = gtk_fixed_new (); /* Must have this to place scroll bars */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
794
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
795 if (! wtop || ! wvbox || ! wfixed)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
796 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
797 if (wtop) gtk_widget_destroy (wtop);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
798 if (wvbox) gtk_widget_destroy (wvbox);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
799 if (wfixed) gtk_widget_destroy (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
800
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
801 UNBLOCK_INPUT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
802 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
803 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
804
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
805 /* Use same names as the Xt port does. I.e. Emacs.pane.emacs by default */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
806 gtk_widget_set_name (wtop, EMACS_CLASS);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
807 gtk_widget_set_name (wvbox, "pane");
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
808 gtk_widget_set_name (wfixed, SSDATA (Vx_resource_name));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
809
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
810 /* If this frame has a title or name, set it in the title bar. */
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
811 if (! NILP (f->title)) title = SSDATA (ENCODE_UTF_8 (f->title));
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
812 else if (! NILP (f->name)) title = SSDATA (ENCODE_UTF_8 (f->name));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
813
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
814 if (title) gtk_window_set_title (GTK_WINDOW (wtop), title);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
815
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
816 FRAME_GTK_OUTER_WIDGET (f) = wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
817 FRAME_GTK_WIDGET (f) = wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
818 f->output_data.x->vbox_widget = wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
819
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
820 gtk_fixed_set_has_window (GTK_FIXED (wfixed), TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
821
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
822 gtk_widget_set_size_request (wfixed, FRAME_PIXEL_WIDTH (f),
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
823 FRAME_PIXEL_HEIGHT (f));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
824
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
825 gtk_container_add (GTK_CONTAINER (wtop), wvbox);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
826 gtk_box_pack_end (GTK_BOX (wvbox), wfixed, TRUE, TRUE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
827
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
828 if (FRAME_EXTERNAL_TOOL_BAR (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
829 update_frame_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
830
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
831 /* The tool bar is created but first there are no items in it.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
832 This causes it to be zero height. Later items are added, but then
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
833 the frame is already mapped, so there is a "jumping" resize.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
834 This makes geometry handling difficult, for example -0-0 will end
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
835 up in the wrong place as tool bar height has not been taken into account.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
836 So we cheat a bit by setting a height that is what it will have
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
837 later on when tool bar items are added. */
56804
3f2598db97ac * gtkutil.c (xg_create_frame_widgets): Compensate for tool bar when
Jan Djärv <jan.h.d@swipnet.se>
parents: 56269
diff changeset
838 if (FRAME_EXTERNAL_TOOL_BAR (f) && f->n_tool_bar_items == 0)
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
839 FRAME_TOOLBAR_HEIGHT (f) = 38;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
840
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
841
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
842 /* We don't want this widget double buffered, because we draw on it
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
843 with regular X drawing primitives, so from a GTK/GDK point of
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
844 view, the widget is totally blank. When an expose comes, this
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
845 will make the widget blank, and then Emacs redraws it. This flickers
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
846 a lot, so we turn off double buffering. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
847 gtk_widget_set_double_buffered (wfixed, FALSE);
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
848
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
849 /* GTK documents says use gtk_window_set_resizable. But then a user
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
850 can't shrink the window from its starting size. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
851 gtk_window_set_policy (GTK_WINDOW (wtop), TRUE, TRUE, TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
852 gtk_window_set_wmclass (GTK_WINDOW (wtop),
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
853 SSDATA (Vx_resource_name),
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
854 SSDATA (Vx_resource_class));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
855
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
856 /* Add callback to do nothing on WM_DELETE_WINDOW. The default in
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
857 GTK is to destroy the widget. We want Emacs to do that instead. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
858 g_signal_connect (G_OBJECT (wtop), "delete-event",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
859 G_CALLBACK (gtk_true), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
860
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
861 /* Convert our geometry parameters into a geometry string
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
862 and specify it.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
863 GTK will itself handle calculating the real position this way. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
864 xg_set_geometry (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
865
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
866 gtk_widget_add_events (wfixed,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
867 GDK_POINTER_MOTION_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
868 | GDK_EXPOSURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
869 | GDK_BUTTON_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
870 | GDK_BUTTON_RELEASE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
871 | GDK_KEY_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
872 | GDK_ENTER_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
873 | GDK_LEAVE_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
874 | GDK_FOCUS_CHANGE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
875 | GDK_STRUCTURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
876 | GDK_VISIBILITY_NOTIFY_MASK);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
877
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
878 /* Must realize the windows so the X window gets created. It is used
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
879 by callers of this function. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
880 gtk_widget_realize (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
881 FRAME_X_WINDOW (f) = GTK_WIDGET_TO_X_WIN (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
882
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
883 /* Since GTK clears its window by filling with the background color,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
884 we must keep X and GTK background in sync. */
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
885 xg_pix_to_gcolor (wfixed, FRAME_BACKGROUND_PIXEL (f), &bg);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
886 gtk_widget_modify_bg (wfixed, GTK_STATE_NORMAL, &bg);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
887
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
888 /* Also, do not let any background pixmap to be set, this looks very
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
889 bad as Emacs overwrites the background pixmap with its own idea
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
890 of background color. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
891 style = gtk_widget_get_modifier_style (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
892
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
893 /* Must use g_strdup because gtk_widget_modify_style does g_free. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
894 style->bg_pixmap_name[GTK_STATE_NORMAL] = g_strdup ("<none>");
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
895 gtk_widget_modify_style (wfixed, style);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
896
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
897 /* GTK does not set any border, and they look bad with GTK. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
898 f->border_width = 0;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
899 f->internal_border_width = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
900
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
901 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
902
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
903 return 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
904 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
905
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
906 /* Set the normal size hints for the window manager, for frame F.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
907 FLAGS is the flags word to use--or 0 meaning preserve the flags
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
908 that the window now has.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
909 If USER_POSITION is nonzero, we set the User Position
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
910 flag (this is useful when FLAGS is 0). */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
911
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
912 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
913 x_wm_set_size_hint (f, flags, user_position)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
914 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
915 long flags;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
916 int user_position;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
917 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
918 if (FRAME_GTK_OUTER_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
919 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
920 /* Must use GTK routines here, otherwise GTK resets the size hints
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
921 to its own defaults. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
922 GdkGeometry size_hints;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
923 gint hint_flags = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
924 int base_width, base_height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
925 int min_rows = 0, min_cols = 0;
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
926 int win_gravity = f->win_gravity;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
927
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
928 if (flags)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
929 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
930 memset (&size_hints, 0, sizeof (size_hints));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
931 f->output_data.x->size_hints = size_hints;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
932 f->output_data.x->hint_flags = hint_flags;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
933 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
934 else
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
935 flags = f->size_hint_flags;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
936
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
937 size_hints = f->output_data.x->size_hints;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
938 hint_flags = f->output_data.x->hint_flags;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
939
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
940 hint_flags |= GDK_HINT_RESIZE_INC | GDK_HINT_MIN_SIZE;
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
941 size_hints.width_inc = FRAME_COLUMN_WIDTH (f);
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
942 size_hints.height_inc = FRAME_LINE_HEIGHT (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
943
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
944 hint_flags |= GDK_HINT_BASE_SIZE;
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
945 base_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
946 base_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
947 + FRAME_MENUBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
948
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
949 check_frame_size (f, &min_rows, &min_cols);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
950
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
951 size_hints.base_width = base_width;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
952 size_hints.base_height = base_height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
953 size_hints.min_width = base_width + min_cols * size_hints.width_inc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
954 size_hints.min_height = base_height + min_rows * size_hints.height_inc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
955
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
956
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
957 /* These currently have a one to one mapping with the X values, but I
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
958 don't think we should rely on that. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
959 hint_flags |= GDK_HINT_WIN_GRAVITY;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
960 size_hints.win_gravity = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
961 if (win_gravity == NorthWestGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
962 size_hints.win_gravity = GDK_GRAVITY_NORTH_WEST;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
963 else if (win_gravity == NorthGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
964 size_hints.win_gravity = GDK_GRAVITY_NORTH;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
965 else if (win_gravity == NorthEastGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
966 size_hints.win_gravity = GDK_GRAVITY_NORTH_EAST;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
967 else if (win_gravity == WestGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
968 size_hints.win_gravity = GDK_GRAVITY_WEST;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
969 else if (win_gravity == CenterGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
970 size_hints.win_gravity = GDK_GRAVITY_CENTER;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
971 else if (win_gravity == EastGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
972 size_hints.win_gravity = GDK_GRAVITY_EAST;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
973 else if (win_gravity == SouthWestGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
974 size_hints.win_gravity = GDK_GRAVITY_SOUTH_WEST;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
975 else if (win_gravity == SouthGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
976 size_hints.win_gravity = GDK_GRAVITY_SOUTH;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
977 else if (win_gravity == SouthEastGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
978 size_hints.win_gravity = GDK_GRAVITY_SOUTH_EAST;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
979 else if (win_gravity == StaticGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
980 size_hints.win_gravity = GDK_GRAVITY_STATIC;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
981
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
982 if (flags & PPosition) hint_flags |= GDK_HINT_POS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
983 if (flags & USPosition) hint_flags |= GDK_HINT_USER_POS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
984 if (flags & USSize) hint_flags |= GDK_HINT_USER_SIZE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
985
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
986 if (user_position)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
987 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
988 hint_flags &= ~GDK_HINT_POS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
989 hint_flags |= GDK_HINT_USER_POS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
990 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
991
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
992 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
993
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
994 gtk_window_set_geometry_hints (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
995 FRAME_GTK_OUTER_WIDGET (f),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
996 &size_hints,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
997 hint_flags);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
998
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
999 f->output_data.x->size_hints = size_hints;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1000 f->output_data.x->hint_flags = hint_flags;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1001 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1002 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1003 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1004
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1005 /* Change background color of a frame.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1006 Since GTK uses the background colour to clear the window, we must
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1007 keep the GTK and X colors in sync.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1008 F is the frame to change,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1009 BG is the pixel value to change to. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1010
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1011 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1012 xg_set_background_color (f, bg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1013 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1014 unsigned long bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1015 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1016 if (FRAME_GTK_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1017 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1018 GdkColor gdk_bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1019
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1020 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1021 xg_pix_to_gcolor (FRAME_GTK_WIDGET (f), bg, &gdk_bg);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1022 gtk_widget_modify_bg (FRAME_GTK_WIDGET (f), GTK_STATE_NORMAL, &gdk_bg);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1023 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1024 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1025 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1026
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1027
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1028 /* Set the frame icon to ICON_PIXMAP/MASK. This must be done with GTK
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1029 functions so GTK does not overwrite the icon. */
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1030
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1031 void
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1032 xg_set_frame_icon (f, icon_pixmap, icon_mask)
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1033 FRAME_PTR f;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1034 Pixmap icon_pixmap;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1035 Pixmap icon_mask;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1036 {
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1037 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1038 GdkPixmap *gpix = gdk_pixmap_foreign_new_for_display (gdpy, icon_pixmap);
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1039 GdkPixmap *gmask = gdk_pixmap_foreign_new_for_display (gdpy, icon_mask);
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1040 GdkPixbuf *gp = xg_get_pixbuf_from_pix_and_mask (gpix, gmask, NULL);
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1041
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1042 gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)), gp);
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1043 }
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1044
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1045
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1046
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1047 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1048 Dialog functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1049 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1050 /* Return the dialog title to use for a dialog of type KEY.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1051 This is the encoding used by lwlib. We use the same for GTK. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1052
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1053 static char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1054 get_dialog_title (char key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1055 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1056 char *title = "";
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1057
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1058 switch (key) {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1059 case 'E': case 'e':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1060 title = "Error";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1061 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1062
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1063 case 'I': case 'i':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1064 title = "Information";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1065 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1066
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1067 case 'L': case 'l':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1068 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1069 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1070
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1071 case 'P': case 'p':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1072 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1073 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1074
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1075 case 'Q': case 'q':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1076 title = "Question";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1077 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1078 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1079
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1080 return title;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1081 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1082
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1083 /* Callback for dialogs that get WM_DELETE_WINDOW. We pop down
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1084 the dialog, but return TRUE so the event does not propagate further
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1085 in GTK. This prevents GTK from destroying the dialog widget automatically
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1086 and we can always destrou the widget manually, regardles of how
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1087 it was popped down (button press or WM_DELETE_WINDOW).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1088 W is the dialog widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1089 EVENT is the GdkEvent that represents WM_DELETE_WINDOW (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1090 user_data is NULL (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1091
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1092 Returns TRUE to end propagation of event. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1093
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1094 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1095 dialog_delete_callback (w, event, user_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1096 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1097 GdkEvent *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1098 gpointer user_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1099 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1100 gtk_widget_unmap (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1101 return TRUE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1102 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1103
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1104 /* Create a popup dialog window. See also xg_create_widget below.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1105 WV is a widget_value describing the dialog.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1106 SELECT_CB is the callback to use when a button has been pressed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1107 DEACTIVATE_CB is the callback to use when the dialog pops down.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1108
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1109 Returns the GTK dialog widget. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1110
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1111 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1112 create_dialog (wv, select_cb, deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1113 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1114 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1115 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1116 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1117 char *title = get_dialog_title (wv->name[0]);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1118 int total_buttons = wv->name[1] - '0';
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1119 int right_buttons = wv->name[4] - '0';
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1120 int left_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1121 int button_nr = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1122 int button_spacing = 10;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1123 GtkWidget *wdialog = gtk_dialog_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1124 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1125 GtkBox *cur_box;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1126 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1127 GtkWidget *whbox_up;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1128 GtkWidget *whbox_down;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1129
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1130 /* If the number of buttons is greater than 4, make two rows of buttons
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1131 instead. This looks better. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1132 int make_two_rows = total_buttons > 4;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1133
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1134 if (right_buttons == 0) right_buttons = total_buttons/2;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1135 left_buttons = total_buttons - right_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1136
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1137 gtk_window_set_title (GTK_WINDOW (wdialog), title);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1138 gtk_widget_set_name (wdialog, "emacs-dialog");
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1139
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1140 cur_box = GTK_BOX (GTK_DIALOG (wdialog)->action_area);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1141
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1142 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1143 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1144 wvbox = gtk_vbox_new (TRUE, button_spacing);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1145 whbox_up = gtk_hbox_new (FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1146 whbox_down = gtk_hbox_new (FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1147
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1148 gtk_box_pack_start (cur_box, wvbox, FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1149 gtk_box_pack_start (GTK_BOX (wvbox), whbox_up, FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1150 gtk_box_pack_start (GTK_BOX (wvbox), whbox_down, FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1151
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1152 cur_box = GTK_BOX (whbox_up);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1153 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1154
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1155 g_signal_connect (G_OBJECT (wdialog), "delete-event",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1156 G_CALLBACK (dialog_delete_callback), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1157
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1158 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1159 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1160 g_signal_connect (G_OBJECT (wdialog), "close", deactivate_cb, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1161 g_signal_connect (G_OBJECT (wdialog), "response", deactivate_cb, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1162 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1163
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1164 for (item = wv->contents; item; item = item->next)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1165 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1166 char *utf8_label = get_utf8_string (item->value);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1167 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1168 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1169
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
1170 if (item->name && strcmp (item->name, "message") == 0)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1171 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1172 /* This is the text part of the dialog. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1173 w = gtk_label_new (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1174 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (wdialog)->vbox),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1175 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1176 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1177 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (wdialog)->vbox), w,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1178 TRUE, TRUE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1179 gtk_misc_set_alignment (GTK_MISC (w), 0.1, 0.5);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1180
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1181 /* Try to make dialog look better. Must realize first so
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1182 the widget can calculate the size it needs. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1183 gtk_widget_realize (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1184 gtk_widget_size_request (w, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1185 gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (wdialog)->vbox),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1186 req.height);
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
1187 if (item->value && strlen (item->value) > 0)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1188 button_spacing = 2*req.width/strlen (item->value);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1189 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1190 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1191 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1192 /* This is one button to add to the dialog. */
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
1193 w = gtk_button_new_with_label (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1194 if (! item->enabled)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1195 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1196 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1197 g_signal_connect (G_OBJECT (w), "clicked",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1198 select_cb, item->call_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1199
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1200 gtk_box_pack_start (cur_box, w, TRUE, TRUE, button_spacing);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1201 if (++button_nr == left_buttons)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1202 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1203 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1204 cur_box = GTK_BOX (whbox_down);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1205 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1206 gtk_box_pack_start (cur_box,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1207 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1208 TRUE, TRUE,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1209 button_spacing);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1210 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1211 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1212
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1213 if (utf8_label && utf8_label != item->value)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1214 g_free (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1215 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1216
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1217 return wdialog;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1218 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1219
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1220
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1221
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1222 /***********************************************************************
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1223 File dialog functions
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1224 ***********************************************************************/
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1225 /* Return non-zero if the old file selection dialog is being used.
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1226 Return zero if not. */
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1227
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1228 int
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1229 xg_uses_old_file_dialog ()
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1230 {
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1231 #ifdef HAVE_GTK_FILE_BOTH
72963
e5e5fcf4397e * gtkutil.c (xg_uses_old_file_dialog): Rename x-use-old-gtk-file-dialog
Jan Djärv <jan.h.d@swipnet.se>
parents: 72931
diff changeset
1232 extern int x_gtk_use_old_file_dialog;
e5e5fcf4397e * gtkutil.c (xg_uses_old_file_dialog): Rename x-use-old-gtk-file-dialog
Jan Djärv <jan.h.d@swipnet.se>
parents: 72931
diff changeset
1233 return x_gtk_use_old_file_dialog;
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1234 #else /* ! HAVE_GTK_FILE_BOTH */
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1235
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1236 #ifdef HAVE_GTK_FILE_SELECTION_NEW
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1237 return 1;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1238 #else
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1239 return 0;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1240 #endif
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1241
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1242 #endif /* ! HAVE_GTK_FILE_BOTH */
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1243 }
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1244
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1245
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1246 /* Function that is called when the file dialog pops down.
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1247 W is the dialog widget, RESPONSE is the response code.
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1248 USER_DATA is what we passed in to g_signal_connect (pointer to int). */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1249
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1250 static void
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1251 xg_file_response_cb (w,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1252 response,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1253 user_data)
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1254 GtkDialog *w;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1255 gint response;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1256 gpointer user_data;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1257 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1258 int *ptr = (int *) user_data;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1259 *ptr = response;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1260 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1261
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1262
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1263 /* Destroy the dialog. This makes it pop down. */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1264
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1265 static Lisp_Object
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1266 pop_down_file_dialog (arg)
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1267 Lisp_Object arg;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1268 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1269 struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
58201
d433adb0e42c Add BLOCK_INPUT in pop_down_file_dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58200
diff changeset
1270 BLOCK_INPUT;
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1271 gtk_widget_destroy (GTK_WIDGET (p->pointer));
58201
d433adb0e42c Add BLOCK_INPUT in pop_down_file_dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58200
diff changeset
1272 UNBLOCK_INPUT;
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1273 return Qnil;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1274 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1275
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1276 typedef char * (*xg_get_file_func) P_ ((GtkWidget *));
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1277
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1278 #ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1279
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1280 /* Return the selected file for file chooser dialog W.
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1281 The returned string must be free:d. */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1282
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1283 static char *
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1284 xg_get_file_name_from_chooser (w)
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1285 GtkWidget *w;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1286 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1287 return gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w));
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1288 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1289
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1290 /* Callback called when the "Show hidden files" toggle is pressed.
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1291 WIDGET is the toggle widget, DATA is the file chooser dialog. */
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1292
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1293 static void
67849
e30591b77191 Formatting
Jan Djärv <jan.h.d@swipnet.se>
parents: 67843
diff changeset
1294 xg_toggle_visibility_cb (widget, data)
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1295 GtkWidget *widget;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1296 gpointer data;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1297 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1298 GtkFileChooser *dialog = GTK_FILE_CHOOSER (data);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1299 gboolean visible;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1300 g_object_get (G_OBJECT (dialog), "show-hidden", &visible, NULL);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1301 g_object_set (G_OBJECT (dialog), "show-hidden", !visible, NULL);
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1302 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1303
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1304
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1305 /* Callback called when a property changes in a file chooser.
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1306 GOBJECT is the file chooser dialog, ARG1 describes the property.
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1307 USER_DATA is the toggle widget in the file chooser dialog.
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1308 We use this to update the "Show hidden files" toggle when the user
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1309 changes that property by right clicking in the file list. */
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1310
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1311 static void
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1312 xg_toggle_notify_cb (gobject, arg1, user_data)
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1313 GObject *gobject;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1314 GParamSpec *arg1;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1315 gpointer user_data;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1316 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1317 extern int x_gtk_show_hidden_files;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1318
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1319 if (strcmp (arg1->name, "show-hidden") == 0)
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1320 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1321 GtkFileChooser *dialog = GTK_FILE_CHOOSER (gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1322 GtkWidget *wtoggle = GTK_WIDGET (user_data);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1323 gboolean visible, toggle_on;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1324
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1325 g_object_get (G_OBJECT (gobject), "show-hidden", &visible, NULL);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1326 toggle_on = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (wtoggle));
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1327
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1328 if (!!visible != !!toggle_on)
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1329 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1330 g_signal_handlers_block_by_func (G_OBJECT (wtoggle),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1331 G_CALLBACK (xg_toggle_visibility_cb),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1332 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1333 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wtoggle), visible);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1334 g_signal_handlers_unblock_by_func
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1335 (G_OBJECT (wtoggle),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1336 G_CALLBACK (xg_toggle_visibility_cb),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1337 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1338 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1339 x_gtk_show_hidden_files = visible;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1340 }
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1341 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1342
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1343 /* Read a file name from the user using a file chooser dialog.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1344 F is the current frame.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1345 PROMPT is a prompt to show to the user. May not be NULL.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1346 DEFAULT_FILENAME is a default selection to be displayed. May be NULL.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1347 If MUSTMATCH_P is non-zero, the returned file name must be an existing
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1348 file. *FUNC is set to a function that can be used to retrieve the
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1349 selected file name from the returned widget.
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1350
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1351 Returns the created widget. */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1352
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1353 static GtkWidget *
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1354 xg_get_file_with_chooser (f, prompt, default_filename,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1355 mustmatch_p, only_dir_p, func)
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1356 FRAME_PTR f;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1357 char *prompt;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1358 char *default_filename;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1359 int mustmatch_p, only_dir_p;
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1360 xg_get_file_func *func;
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1361 {
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1362 char message[1024];
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1363
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1364 GtkWidget *filewin, *wtoggle, *wbox, *wmessage;
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1365 GtkWindow *gwin = GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f));
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1366 GtkFileChooserAction action = (mustmatch_p ?
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1367 GTK_FILE_CHOOSER_ACTION_OPEN :
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1368 GTK_FILE_CHOOSER_ACTION_SAVE);
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1369 extern int x_gtk_show_hidden_files;
72968
13a9a628ff21 * gtkutil.c (xg_get_file_with_chooser): Rename x_gtk_show_chooser_help_text to
Jan Djärv <jan.h.d@swipnet.se>
parents: 72963
diff changeset
1370 extern int x_gtk_file_dialog_help_text;
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1371
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1372
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1373 if (only_dir_p)
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1374 action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1375
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1376 filewin = gtk_file_chooser_dialog_new (prompt, gwin, action,
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1377 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1378 (mustmatch_p || only_dir_p ?
57900
a76858072e78 * gtkutil.c (xg_get_file_with_chooser): Use GTK_STOCK_OK instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 57868
diff changeset
1379 GTK_STOCK_OPEN : GTK_STOCK_OK),
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1380 GTK_RESPONSE_OK,
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1381 NULL);
58817
65f1b18b7f66 * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58463
diff changeset
1382 gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (filewin), TRUE);
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1383
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1384 wbox = gtk_vbox_new (FALSE, 0);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1385 gtk_widget_show (wbox);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1386 wtoggle = gtk_check_button_new_with_label ("Show hidden files.");
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1387
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1388 if (x_gtk_show_hidden_files)
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1389 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1390 g_object_set (G_OBJECT (filewin), "show-hidden", TRUE, NULL);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1391 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wtoggle), TRUE);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1392 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1393 gtk_widget_show (wtoggle);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1394 g_signal_connect (G_OBJECT (wtoggle), "clicked",
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1395 G_CALLBACK (xg_toggle_visibility_cb), filewin);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1396 g_signal_connect (G_OBJECT (filewin), "notify",
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1397 G_CALLBACK (xg_toggle_notify_cb), wtoggle);
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1398
72968
13a9a628ff21 * gtkutil.c (xg_get_file_with_chooser): Rename x_gtk_show_chooser_help_text to
Jan Djärv <jan.h.d@swipnet.se>
parents: 72963
diff changeset
1399 if (x_gtk_file_dialog_help_text)
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1400 {
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1401 message[0] = '\0';
73048
4a83c4a89b5e * gtkutil.c (xg_get_file_with_chooser): Only chow C-l help for
Jan Djärv <jan.h.d@swipnet.se>
parents: 72968
diff changeset
1402 /* Gtk+ 2.10 has the file name text entry box integrated in the dialog.
4a83c4a89b5e * gtkutil.c (xg_get_file_with_chooser): Only chow C-l help for
Jan Djärv <jan.h.d@swipnet.se>
parents: 72968
diff changeset
1403 Show the C-l help text only for versions < 2.10. */
73066
dcaff8f63a2b Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 73048
diff changeset
1404 if (gtk_check_version (2, 10, 0) && action != GTK_FILE_CHOOSER_ACTION_SAVE)
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1405 strcat (message, "\nType C-l to display a file name text entry box.\n");
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1406 strcat (message, "\nIf you don't like this file selector, use the "
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1407 "corresponding\nkey binding or customize "
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1408 "use-file-dialog to turn it off.");
72614
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1409
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1410 wmessage = gtk_label_new (message);
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1411 gtk_widget_show (wmessage);
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1412 }
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1413
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1414 gtk_box_pack_start (GTK_BOX (wbox), wtoggle, FALSE, FALSE, 0);
72968
13a9a628ff21 * gtkutil.c (xg_get_file_with_chooser): Rename x_gtk_show_chooser_help_text to
Jan Djärv <jan.h.d@swipnet.se>
parents: 72963
diff changeset
1415 if (x_gtk_file_dialog_help_text)
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1416 gtk_box_pack_start (GTK_BOX (wbox), wmessage, FALSE, FALSE, 0);
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1417 gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (filewin), wbox);
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1418
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1419 if (default_filename)
57940
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1420 {
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1421 Lisp_Object file;
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1422 struct gcpro gcpro1;
78781
415fda17ec8f (xg_get_file_with_chooser): Move GCPRO1 after declarations
Jan Djärv <jan.h.d@swipnet.se>
parents: 78762
diff changeset
1423 char *utf8_filename;
57940
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1424 GCPRO1 (file);
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1425
58817
65f1b18b7f66 * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58463
diff changeset
1426 file = build_string (default_filename);
65f1b18b7f66 * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58463
diff changeset
1427
57940
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1428 /* File chooser does not understand ~/... in the file name. It must be
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1429 an absolute name starting with /. */
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1430 if (default_filename[0] != '/')
58817
65f1b18b7f66 * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58463
diff changeset
1431 file = Fexpand_file_name (file, Qnil);
72614
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1432
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1433 utf8_filename = SSDATA (ENCODE_UTF_8 (file));
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1434 if (! NILP (Ffile_directory_p (file)))
58817
65f1b18b7f66 * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58463
diff changeset
1435 gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filewin),
72614
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1436 utf8_filename);
58817
65f1b18b7f66 * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58463
diff changeset
1437 else
72614
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1438 {
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1439 gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (filewin),
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1440 utf8_filename);
72637
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1441 if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1442 {
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1443 char *cp = strrchr (utf8_filename, '/');
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1444 if (cp) ++cp;
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1445 else cp = utf8_filename;
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1446 gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filewin), cp);
9db8c9a68f0f * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
Jan Djärv <jan.h.d@swipnet.se>
parents: 72614
diff changeset
1447 }
72614
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1448 }
57940
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1449
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1450 UNGCPRO;
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1451 }
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1452
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1453 *func = xg_get_file_name_from_chooser;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1454 return filewin;
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1455 }
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1456 #endif /* HAVE_GTK_FILE_CHOOSER_DIALOG_NEW */
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1457
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1458 #ifdef HAVE_GTK_FILE_SELECTION_NEW
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1459
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1460 /* Return the selected file for file selector dialog W.
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1461 The returned string must be free:d. */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1462
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1463 static char *
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1464 xg_get_file_name_from_selector (w)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1465 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1466 {
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1467 GtkFileSelection *filesel = GTK_FILE_SELECTION (w);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1468 return xstrdup ((char*) gtk_file_selection_get_filename (filesel));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1469 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1470
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1471 /* Create a file selection dialog.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1472 F is the current frame.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1473 PROMPT is a prompt to show to the user. May not be NULL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1474 DEFAULT_FILENAME is a default selection to be displayed. May be NULL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1475 If MUSTMATCH_P is non-zero, the returned file name must be an existing
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1476 file. *FUNC is set to a function that can be used to retrieve the
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1477 selected file name from the returned widget.
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1478
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1479 Returns the created widget. */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1480
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1481 static GtkWidget *
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1482 xg_get_file_with_selection (f, prompt, default_filename,
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1483 mustmatch_p, only_dir_p, func)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1484 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1485 char *prompt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1486 char *default_filename;
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1487 int mustmatch_p, only_dir_p;
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1488 xg_get_file_func *func;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1489 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1490 GtkWidget *filewin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1491 GtkFileSelection *filesel;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1492
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1493 filewin = gtk_file_selection_new (prompt);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1494 filesel = GTK_FILE_SELECTION (filewin);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1495
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1496 if (default_filename)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1497 gtk_file_selection_set_filename (filesel, default_filename);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1498
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1499 if (mustmatch_p)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1500 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1501 /* The selection_entry part of filesel is not documented. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1502 gtk_widget_set_sensitive (filesel->selection_entry, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1503 gtk_file_selection_hide_fileop_buttons (filesel);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1504 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1505
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1506 *func = xg_get_file_name_from_selector;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1507
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1508 return filewin;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1509 }
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1510 #endif /* HAVE_GTK_FILE_SELECTION_NEW */
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1511
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1512 /* Read a file name from the user using a file dialog, either the old
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1513 file selection dialog, or the new file chooser dialog. Which to use
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1514 depends on what the GTK version used has, and what the value of
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1515 gtk-use-old-file-dialog.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1516 F is the current frame.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1517 PROMPT is a prompt to show to the user. May not be NULL.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1518 DEFAULT_FILENAME is a default selection to be displayed. May be NULL.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1519 If MUSTMATCH_P is non-zero, the returned file name must be an existing
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1520 file.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1521
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1522 Returns a file name or NULL if no file was selected.
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1523 The returned string must be freed by the caller. */
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1524
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1525 char *
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1526 xg_get_file_name (f, prompt, default_filename, mustmatch_p, only_dir_p)
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1527 FRAME_PTR f;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1528 char *prompt;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1529 char *default_filename;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1530 int mustmatch_p, only_dir_p;
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1531 {
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1532 GtkWidget *w = 0;
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1533 int count = SPECPDL_INDEX ();
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1534 char *fn = 0;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1535 int filesel_done = 0;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1536 xg_get_file_func func;
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1537
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1538 #if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN)
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1539 /* I really don't know why this is needed, but without this the GLIBC add on
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1540 library linuxthreads hangs when the Gnome file chooser backend creates
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1541 threads. */
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1542 sigblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1543 #endif /* HAVE_GTK_AND_PTHREAD */
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1544
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1545 #ifdef HAVE_GTK_FILE_BOTH
58463
86fddd350b35 * gtkutil.c (xg_get_file_name): Rename use-old-gtk-file-dialog to
Jan Djärv <jan.h.d@swipnet.se>
parents: 58284
diff changeset
1546
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1547 if (xg_uses_old_file_dialog ())
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1548 w = xg_get_file_with_selection (f, prompt, default_filename,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1549 mustmatch_p, only_dir_p, &func);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1550 else
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1551 w = xg_get_file_with_chooser (f, prompt, default_filename,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1552 mustmatch_p, only_dir_p, &func);
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1553
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1554 #else /* not HAVE_GTK_FILE_BOTH */
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1555
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1556 #ifdef HAVE_GTK_FILE_SELECTION_NEW
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1557 w = xg_get_file_with_selection (f, prompt, default_filename,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1558 mustmatch_p, only_dir_p, &func);
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1559 #endif
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1560 #ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1561 w = xg_get_file_with_chooser (f, prompt, default_filename,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1562 mustmatch_p, only_dir_p, &func);
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1563 #endif
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1564
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1565 #endif /* HAVE_GTK_FILE_BOTH */
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1566
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1567 xg_set_screen (w, f);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1568 gtk_widget_set_name (w, "emacs-filedialog");
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1569 gtk_window_set_transient_for (GTK_WINDOW (w),
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1570 GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1571 gtk_window_set_destroy_with_parent (GTK_WINDOW (w), TRUE);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1572 gtk_window_set_modal (GTK_WINDOW (w), TRUE);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1573
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1574 g_signal_connect (G_OBJECT (w),
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1575 "response",
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1576 G_CALLBACK (xg_file_response_cb),
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1577 &filesel_done);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1578
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1579 /* Don't destroy the widget if closed by the window manager close button. */
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1580 g_signal_connect (G_OBJECT (w), "delete-event", G_CALLBACK (gtk_true), NULL);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1581
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1582 gtk_widget_show (w);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1583
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1584 record_unwind_protect (pop_down_file_dialog, make_save_value (w, 0));
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1585 while (! filesel_done)
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1586 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1587 x_menu_wait_for_event (0);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1588 gtk_main_iteration ();
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1589 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1590
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1591 #if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN)
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1592 sigunblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1593 #endif
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1594
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1595 if (filesel_done == GTK_RESPONSE_OK)
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1596 fn = (*func) (w);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1597
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1598 unbind_to (count, Qnil);
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1599
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1600 return fn;
57868
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1601 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1602
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1603
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1604 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1605 Menu functions.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1606 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1607
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1608 /* The name of menu items that can be used for citomization. Since GTK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1609 RC files are very crude and primitive, we have to set this on all
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1610 menu item names so a user can easily cutomize menu items. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1611
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1612 #define MENU_ITEM_NAME "emacs-menuitem"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1613
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1614
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1615 /* Linked list of all allocated struct xg_menu_cb_data. Used for marking
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1616 during GC. The next member points to the items. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1617 static xg_list_node xg_menu_cb_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1618
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1619 /* Linked list of all allocated struct xg_menu_item_cb_data. Used for marking
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1620 during GC. The next member points to the items. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1621 static xg_list_node xg_menu_item_cb_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1622
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1623 /* Allocate and initialize CL_DATA if NULL, otherwise increase ref_count.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1624 F is the frame CL_DATA will be initialized for.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1625 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1626
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1627 The menu bar and all sub menus under the menu bar in a frame
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1628 share the same structure, hence the reference count.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1629
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1630 Returns CL_DATA if CL_DATA is not NULL, or a pointer to a newly
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1631 allocated xg_menu_cb_data if CL_DATA is NULL. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1632
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1633 static xg_menu_cb_data *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1634 make_cl_data (cl_data, f, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1635 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1636 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1637 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1638 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1639 if (! cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1640 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1641 cl_data = (xg_menu_cb_data*) xmalloc (sizeof (*cl_data));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1642 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1643 cl_data->menu_bar_vector = f->menu_bar_vector;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1644 cl_data->menu_bar_items_used = f->menu_bar_items_used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1645 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1646 cl_data->ref_count = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1647
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1648 xg_list_insert (&xg_menu_cb_list, &cl_data->ptrs);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1649 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1650
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1651 cl_data->ref_count++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1652
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1653 return cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1654 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1655
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1656 /* Update CL_DATA with values from frame F and with HIGHLIGHT_CB.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1657 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1658
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1659 When the menu bar is updated, menu items may have been added and/or
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1660 removed, so menu_bar_vector and menu_bar_items_used change. We must
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1661 then update CL_DATA since it is used to determine which menu
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1662 item that is invoked in the menu.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1663 HIGHLIGHT_CB could change, there is no check that the same
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1664 function is given when modifying a menu bar as was given when
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1665 creating the menu bar. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1666
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1667 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1668 update_cl_data (cl_data, f, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1669 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1670 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1671 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1672 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1673 if (cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1674 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1675 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1676 cl_data->menu_bar_vector = f->menu_bar_vector;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1677 cl_data->menu_bar_items_used = f->menu_bar_items_used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1678 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1679 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1680 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1681
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1682 /* Decrease reference count for CL_DATA.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1683 If reference count is zero, free CL_DATA. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1684
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1685 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1686 unref_cl_data (cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1687 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1688 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1689 if (cl_data && cl_data->ref_count > 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1690 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1691 cl_data->ref_count--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1692 if (cl_data->ref_count == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1693 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1694 xg_list_remove (&xg_menu_cb_list, &cl_data->ptrs);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1695 xfree (cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1696 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1697 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1698 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1699
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1700 /* Function that marks all lisp data during GC. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1701
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1702 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1703 xg_mark_data ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1704 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1705 xg_list_node *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1706
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1707 for (iter = xg_menu_cb_list.next; iter; iter = iter->next)
52080
c150d4a7aa36 gtkutil.c (xg_mark_data): Update calls to mark_object.
Jan Djärv <jan.h.d@swipnet.se>
parents: 51569
diff changeset
1708 mark_object (((xg_menu_cb_data *) iter)->menu_bar_vector);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1709
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1710 for (iter = xg_menu_item_cb_list.next; iter; iter = iter->next)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1711 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1712 xg_menu_item_cb_data *cb_data = (xg_menu_item_cb_data *) iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1713
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1714 if (! NILP (cb_data->help))
52080
c150d4a7aa36 gtkutil.c (xg_mark_data): Update calls to mark_object.
Jan Djärv <jan.h.d@swipnet.se>
parents: 51569
diff changeset
1715 mark_object (cb_data->help);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1716 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1717 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1718
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1719
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1720 /* Callback called when a menu item is destroyed. Used to free data.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1721 W is the widget that is being destroyed (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1722 CLIENT_DATA points to the xg_menu_item_cb_data associated with the W. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1723
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1724 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1725 menuitem_destroy_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1726 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1727 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1728 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1729 if (client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1730 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1731 xg_menu_item_cb_data *data = (xg_menu_item_cb_data*) client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1732 xg_list_remove (&xg_menu_item_cb_list, &data->ptrs);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1733 xfree (data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1734 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1735 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1736
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1737 /* Callback called when the pointer enters/leaves a menu item.
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1738 W is the parent of the menu item.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1739 EVENT is either an enter event or leave event.
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1740 CLIENT_DATA is not used.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1741
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1742 Returns FALSE to tell GTK to keep processing this event. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1743
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1744 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1745 menuitem_highlight_callback (w, event, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1746 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1747 GdkEventCrossing *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1748 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1749 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1750 GdkEvent ev;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1751 GtkWidget *subwidget;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1752 xg_menu_item_cb_data *data;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1753
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1754 ev.crossing = *event;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1755 subwidget = gtk_get_event_widget (&ev);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1756 data = (xg_menu_item_cb_data *) g_object_get_data (G_OBJECT (subwidget),
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1757 XG_ITEM_DATA);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1758 if (data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1759 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1760 if (! NILP (data->help) && data->cl_data->highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1761 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1762 gpointer call_data = event->type == GDK_LEAVE_NOTIFY ? 0 : data;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1763 GtkCallback func = (GtkCallback) data->cl_data->highlight_cb;
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1764 (*func) (subwidget, call_data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1765 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1766 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1767
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1768 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1769 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1770
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1771 /* Callback called when a menu is destroyed. Used to free data.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1772 W is the widget that is being destroyed (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1773 CLIENT_DATA points to the xg_menu_cb_data associated with W. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1774
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1775 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1776 menu_destroy_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1777 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1778 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1779 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1780 unref_cl_data ((xg_menu_cb_data*) client_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1781 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1782
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1783 /* Callback called when a menu does a grab or ungrab. That means the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1784 menu has been activated or deactivated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1785 Used to start a timer so the small timeout the menus in GTK uses before
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1786 popping down a menu is seen by Emacs (see xg_process_timeouts above).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1787 W is the widget that does the grab (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1788 UNGRAB_P is TRUE if this is an ungrab, FALSE if it is a grab.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1789 CLIENT_DATA is NULL (not used). */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1790
78744
b342cac5976b (menu_grab_callback) <cnt>: Move static variable to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78721
diff changeset
1791 /* Keep track of total number of grabs. */
78762
c4d33a7385f0 (cnt): Rename to menu_grab_callback_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78744
diff changeset
1792 static int menu_grab_callback_cnt;
78744
b342cac5976b (menu_grab_callback) <cnt>: Move static variable to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78721
diff changeset
1793
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1794 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1795 menu_grab_callback (GtkWidget *widget,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1796 gboolean ungrab_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1797 gpointer client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1798 {
78762
c4d33a7385f0 (cnt): Rename to menu_grab_callback_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78744
diff changeset
1799 if (ungrab_p) menu_grab_callback_cnt--;
c4d33a7385f0 (cnt): Rename to menu_grab_callback_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78744
diff changeset
1800 else menu_grab_callback_cnt++;
c4d33a7385f0 (cnt): Rename to menu_grab_callback_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78744
diff changeset
1801
c4d33a7385f0 (cnt): Rename to menu_grab_callback_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78744
diff changeset
1802 if (menu_grab_callback_cnt > 0 && ! xg_timer) xg_start_timer ();
c4d33a7385f0 (cnt): Rename to menu_grab_callback_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78744
diff changeset
1803 else if (menu_grab_callback_cnt == 0 && xg_timer) xg_stop_timer ();
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1804 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1805
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1806 /* Make a GTK widget that contains both UTF8_LABEL and UTF8_KEY (both
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1807 must be non-NULL) and can be inserted into a menu item.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1808
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1809 Returns the GtkHBox. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1810
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1811 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1812 make_widget_for_menu_item (utf8_label, utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1813 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1814 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1815 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1816 GtkWidget *wlbl;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1817 GtkWidget *wkey;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1818 GtkWidget *wbox;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1819
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1820 wbox = gtk_hbox_new (FALSE, 0);
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
1821 wlbl = gtk_label_new (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1822 wkey = gtk_label_new (utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1823
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1824 gtk_misc_set_alignment (GTK_MISC (wlbl), 0.0, 0.5);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1825 gtk_misc_set_alignment (GTK_MISC (wkey), 0.0, 0.5);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1826
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1827 gtk_box_pack_start (GTK_BOX (wbox), wlbl, TRUE, TRUE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1828 gtk_box_pack_start (GTK_BOX (wbox), wkey, FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1829
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1830 gtk_widget_set_name (wlbl, MENU_ITEM_NAME);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1831 gtk_widget_set_name (wkey, MENU_ITEM_NAME);
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
1832 gtk_widget_set_name (wbox, MENU_ITEM_NAME);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1833
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1834 return wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1835 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1836
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1837 /* Make and return a menu item widget with the key to the right.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1838 UTF8_LABEL is the text for the menu item (GTK uses UTF8 internally).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1839 UTF8_KEY is the text representing the key binding.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1840 ITEM is the widget_value describing the menu item.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1841
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1842 GROUP is an in/out parameter. If the menu item to be created is not
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1843 part of any radio menu group, *GROUP contains NULL on entry and exit.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1844 If the menu item to be created is part of a radio menu group, on entry
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1845 *GROUP contains the group to use, or NULL if this is the first item
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1846 in the group. On exit, *GROUP contains the radio item group.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1847
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1848 Unfortunately, keys don't line up as nicely as in Motif,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1849 but the MacOS X version doesn't either, so I guess that is OK. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1850
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1851 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1852 make_menu_item (utf8_label, utf8_key, item, group)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1853 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1854 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1855 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1856 GSList **group;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1857 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1858 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1859 GtkWidget *wtoadd = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1860
51432
6db55492aca9 * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
Jan Djärv <jan.h.d@swipnet.se>
parents: 51408
diff changeset
1861 /* It has been observed that some menu items have a NULL name field.
6db55492aca9 * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
Jan Djärv <jan.h.d@swipnet.se>
parents: 51408
diff changeset
1862 This will lead to this function being called with a NULL utf8_label.
6db55492aca9 * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
Jan Djärv <jan.h.d@swipnet.se>
parents: 51408
diff changeset
1863 GTK crashes on that so we set a blank label. Why there is a NULL
6db55492aca9 * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
Jan Djärv <jan.h.d@swipnet.se>
parents: 51408
diff changeset
1864 name remains to be investigated. */
6db55492aca9 * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
Jan Djärv <jan.h.d@swipnet.se>
parents: 51408
diff changeset
1865 if (! utf8_label) utf8_label = " ";
6db55492aca9 * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
Jan Djärv <jan.h.d@swipnet.se>
parents: 51408
diff changeset
1866
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1867 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1868 wtoadd = make_widget_for_menu_item (utf8_label, utf8_key);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1869
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1870 if (item->button_type == BUTTON_TYPE_TOGGLE)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1871 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1872 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1873 if (utf8_key) w = gtk_check_menu_item_new ();
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
1874 else w = gtk_check_menu_item_new_with_label (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1875 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), item->selected);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1876 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1877 else if (item->button_type == BUTTON_TYPE_RADIO)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1878 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1879 if (utf8_key) w = gtk_radio_menu_item_new (*group);
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
1880 else w = gtk_radio_menu_item_new_with_label (*group, utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1881 *group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (w));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1882 if (item->selected)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1883 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1884 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1885 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1886 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1887 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1888 if (utf8_key) w = gtk_menu_item_new ();
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
1889 else w = gtk_menu_item_new_with_label (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1890 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1891
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1892 if (wtoadd) gtk_container_add (GTK_CONTAINER (w), wtoadd);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1893 if (! item->enabled) gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1894
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1895 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1896 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1897
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1898 /* Return non-zero if LABEL specifies a separator (GTK only has one
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1899 separator type) */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1900
78787
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1901 static char* separator_names[] = {
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1902 "space",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1903 "no-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1904 "single-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1905 "double-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1906 "single-dashed-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1907 "double-dashed-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1908 "shadow-etched-in",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1909 "shadow-etched-out",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1910 "shadow-etched-in-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1911 "shadow-etched-out-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1912 "shadow-double-etched-in",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1913 "shadow-double-etched-out",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1914 "shadow-double-etched-in-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1915 "shadow-double-etched-out-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1916 0,
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1917 };
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1918
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1919 static int
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1920 xg_separator_p (char *label)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1921 {
50318
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1922 if (! label) return 0;
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1923 else if (strlen (label) > 3
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1924 && strncmp (label, "--", 2) == 0
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1925 && label[2] != '-')
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1926 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1927 int i;
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1928
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1929 label += 2;
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1930 for (i = 0; separator_names[i]; ++i)
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1931 if (strcmp (label, separator_names[i]) == 0)
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1932 return 1;
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1933 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1934 else
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1935 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1936 /* Old-style separator, maybe. It's a separator if it contains
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1937 only dashes. */
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1938 while (*label == '-')
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1939 ++label;
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1940 if (*label == 0) return 1;
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1941 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1942
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1943 return 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1944 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1945
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1946 static int xg_detached_menus;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1947
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1948 /* Returns non-zero if there are detached menus. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1949
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1950 int
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1951 xg_have_tear_offs ()
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1952 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1953 return xg_detached_menus > 0;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1954 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1955
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1956 /* Callback invoked when a detached menu window is removed. Here we
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1957 decrease the xg_detached_menus count.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1958 WIDGET is the top level window that is removed (the parent of the menu).
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1959 CLIENT_DATA is not used. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1960
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1961 static void
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1962 tearoff_remove (widget, client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1963 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1964 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1965 {
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1966 if (xg_detached_menus > 0) --xg_detached_menus;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1967 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1968
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1969 /* Callback invoked when a menu is detached. It increases the
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1970 xg_detached_menus count.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1971 WIDGET is the GtkTearoffMenuItem.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1972 CLIENT_DATA is not used. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
1973
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1974 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1975 tearoff_activate (widget, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1976 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1977 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1978 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1979 GtkWidget *menu = gtk_widget_get_parent (widget);
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1980 if (gtk_menu_get_tearoff_state (GTK_MENU (menu)))
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1981 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1982 ++xg_detached_menus;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1983 g_signal_connect (G_OBJECT (gtk_widget_get_toplevel (widget)),
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1984 "destroy",
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1985 G_CALLBACK (tearoff_remove), 0);
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1986 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1987 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1988
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1989
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1990 /* Create a menu item widget, and connect the callbacks.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1991 ITEM decribes the menu item.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1992 F is the frame the created menu belongs to.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1993 SELECT_CB is the callback to use when a menu item is selected.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1994 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1995 CL_DATA points to the callback data to be used for this menu.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1996 GROUP is an in/out parameter. If the menu item to be created is not
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1997 part of any radio menu group, *GROUP contains NULL on entry and exit.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1998 If the menu item to be created is part of a radio menu group, on entry
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1999 *GROUP contains the group to use, or NULL if this is the first item
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2000 in the group. On exit, *GROUP contains the radio item group.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2001
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2002 Returns the created GtkWidget. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2003
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2004 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2005 xg_create_one_menuitem (item, f, select_cb, highlight_cb, cl_data, group)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2006 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2007 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2008 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2009 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2010 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2011 GSList **group;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2012 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2013 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2014 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2015 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2016 xg_menu_item_cb_data *cb_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2017
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2018 utf8_label = get_utf8_string (item->name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2019 utf8_key = get_utf8_string (item->key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2020
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2021 w = make_menu_item (utf8_label, utf8_key, item, group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2022
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2023 if (utf8_label && utf8_label != item->name) g_free (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2024 if (utf8_key && utf8_key != item->key) g_free (utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2025
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2026 cb_data = xmalloc (sizeof (xg_menu_item_cb_data));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2027
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2028 xg_list_insert (&xg_menu_item_cb_list, &cb_data->ptrs);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2029
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2030 cb_data->select_id = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2031 cb_data->help = item->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2032 cb_data->cl_data = cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2033 cb_data->call_data = item->call_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2034
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2035 g_signal_connect (G_OBJECT (w),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2036 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2037 G_CALLBACK (menuitem_destroy_callback),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2038 cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2039
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2040 /* Put cb_data in widget, so we can get at it when modifying menubar */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2041 g_object_set_data (G_OBJECT (w), XG_ITEM_DATA, cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2042
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2043 /* final item, not a submenu */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2044 if (item->call_data && ! item->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2045 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2046 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2047 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2048 = g_signal_connect (G_OBJECT (w), "activate", select_cb, cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2049 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2050
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2051 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2052 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2053
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
2054 /* Callback called when keyboard traversal (started by x-menu-bar-open) ends.
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2055 WMENU is the menu for which traversal has been done. DATA points to the
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2056 frame for WMENU. We must release grabs, some bad interaction between GTK
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2057 and Emacs makes the menus keep the grabs. */
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2058
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2059 static void
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2060 menu_nav_ended (wmenu, data)
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2061 GtkMenuShell *wmenu;
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2062 gpointer data;
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2063 {
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2064 FRAME_PTR f = (FRAME_PTR) data;
71160
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2065
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2066 if (FRAME_X_OUTPUT (f)->menubar_widget)
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2067 {
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2068 GtkMenuShell *w = GTK_MENU_SHELL (FRAME_X_OUTPUT (f)->menubar_widget);
71160
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2069 Display *dpy = FRAME_X_DISPLAY (f);
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2070
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2071 BLOCK_INPUT;
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2072 gtk_menu_shell_deactivate (w);
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2073 gtk_menu_shell_deselect (w);
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2074
71160
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2075 XUngrabKeyboard (dpy, CurrentTime);
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2076 XUngrabPointer (dpy, CurrentTime);
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2077 UNBLOCK_INPUT;
070b40db0b2a * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71132
diff changeset
2078 }
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2079 }
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2080
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2081
50112
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2082 static GtkWidget *create_menus P_ ((widget_value *, FRAME_PTR, GCallback,
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2083 GCallback, GCallback, int, int, int,
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2084 GtkWidget *, xg_menu_cb_data *, char *));
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2085
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2086 /* Create a full menu tree specified by DATA.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2087 F is the frame the created menu belongs to.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2088 SELECT_CB is the callback to use when a menu item is selected.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2089 DEACTIVATE_CB is the callback to use when a sub menu is not shown anymore.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2090 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2091 POP_UP_P is non-zero if we shall create a popup menu.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2092 MENU_BAR_P is non-zero if we shall create a menu bar.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2093 ADD_TEAROFF_P is non-zero if we shall add a teroff menu item. Ignored
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2094 if MENU_BAR_P is non-zero.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2095 TOPMENU is the topmost GtkWidget that others shall be placed under.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2096 It may be NULL, in that case we create the appropriate widget
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2097 (menu bar or menu item depending on POP_UP_P and MENU_BAR_P)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2098 CL_DATA is the callback data we shall use for this menu, or NULL
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2099 if we haven't set the first callback yet.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2100 NAME is the name to give to the top level menu if this function
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2101 creates it. May be NULL to not set any name.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2102
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2103 Returns the top level GtkWidget. This is TOPLEVEL if TOPLEVEL is
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2104 not NULL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2105
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2106 This function calls itself to create submenus. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2107
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2108 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2109 create_menus (data, f, select_cb, deactivate_cb, highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2110 pop_up_p, menu_bar_p, add_tearoff_p, topmenu, cl_data, name)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2111 widget_value *data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2112 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2113 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2114 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2115 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2116 int pop_up_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2117 int menu_bar_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2118 int add_tearoff_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2119 GtkWidget *topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2120 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2121 char *name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2122 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2123 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2124 GtkWidget *wmenu = topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2125 GSList *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2126
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2127 if (! topmenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2128 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2129 if (! menu_bar_p)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2130 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2131 wmenu = gtk_menu_new ();
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2132 xg_set_screen (wmenu, f);
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2133 /* Connect this to the menu instead of items so we get enter/leave for
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2134 disabled items also. TODO: Still does not get enter/leave for
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2135 disabled items in detached menus. */
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2136 g_signal_connect (G_OBJECT (wmenu),
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2137 "enter-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2138 G_CALLBACK (menuitem_highlight_callback),
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2139 NULL);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2140 g_signal_connect (G_OBJECT (wmenu),
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2141 "leave-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2142 G_CALLBACK (menuitem_highlight_callback),
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2143 NULL);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2144 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2145 else wmenu = gtk_menu_bar_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2146
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2147 /* Fix up grabs after keyboard traversal ends. */
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2148 g_signal_connect (G_OBJECT (wmenu),
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2149 "selection-done",
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2150 G_CALLBACK (menu_nav_ended),
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2151 f);
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2152
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2153 /* Put cl_data on the top menu for easier access. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2154 cl_data = make_cl_data (cl_data, f, highlight_cb);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2155 g_object_set_data (G_OBJECT (wmenu), XG_FRAME_DATA, (gpointer)cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2156 g_signal_connect (G_OBJECT (wmenu), "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2157 G_CALLBACK (menu_destroy_callback), cl_data);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2158
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2159 if (name)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2160 gtk_widget_set_name (wmenu, name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2161
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2162 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2163 g_signal_connect (G_OBJECT (wmenu),
59913
b3664fca53d1 * gtkutil.c (create_menus): Connect selection-done event instead of
Jan Djärv <jan.h.d@swipnet.se>
parents: 59666
diff changeset
2164 "selection-done", deactivate_cb, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2165
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2166 g_signal_connect (G_OBJECT (wmenu),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2167 "grab-notify", G_CALLBACK (menu_grab_callback), 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2168 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2169
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2170 if (! menu_bar_p && add_tearoff_p)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2171 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2172 GtkWidget *tearoff = gtk_tearoff_menu_item_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2173 gtk_menu_shell_append (GTK_MENU_SHELL (wmenu), tearoff);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2174
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2175 g_signal_connect (G_OBJECT (tearoff), "activate",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2176 G_CALLBACK (tearoff_activate), 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2177 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2178
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2179 for (item = data; item; item = item->next)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2180 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2181 GtkWidget *w;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2182
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2183 if (pop_up_p && !item->contents && !item->call_data
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2184 && !xg_separator_p (item->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2185 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2186 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2187 /* A title for a popup. We do the same as GTK does when
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2188 creating titles, but it does not look good. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2189 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2190 utf8_label = get_utf8_string (item->name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2191
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2192 gtk_menu_set_title (GTK_MENU (wmenu), utf8_label);
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
2193 w = gtk_menu_item_new_with_label (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2194 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2195 if (utf8_label && utf8_label != item->name) g_free (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2196 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2197 else if (xg_separator_p (item->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2198 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2199 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2200 /* GTK only have one separator type. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2201 w = gtk_separator_menu_item_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2202 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2203 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2204 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2205 w = xg_create_one_menuitem (item,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2206 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2207 item->contents ? 0 : select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2208 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2209 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2210 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2211
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2212 /* Create a possibly empty submenu for menu bar items, since some
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2213 themes don't highlight items correctly without it. */
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2214 if (item->contents || menu_bar_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2215 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2216 GtkWidget *submenu = create_menus (item->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2217 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2218 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2219 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2220 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2221 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2222 0,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2223 add_tearoff_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2224 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2225 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2226 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2227 gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), submenu);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2228 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2229 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2230
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2231 gtk_menu_shell_append (GTK_MENU_SHELL (wmenu), w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2232 gtk_widget_set_name (w, MENU_ITEM_NAME);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2233 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2234
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2235 return wmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2236 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2237
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2238 /* Create a menubar, popup menu or dialog, depending on the TYPE argument.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2239 TYPE can be "menubar", "popup" for popup menu, or "dialog" for a dialog
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2240 with some text and buttons.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2241 F is the frame the created item belongs to.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2242 NAME is the name to use for the top widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2243 VAL is a widget_value structure describing items to be created.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2244 SELECT_CB is the callback to use when a menu item is selected or
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2245 a dialog button is pressed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2246 DEACTIVATE_CB is the callback to use when an item is deactivated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2247 For a menu, when a sub menu is not shown anymore, for a dialog it is
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2248 called when the dialog is popped down.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2249 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2250
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2251 Returns the widget created. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2252
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2253 GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2254 xg_create_widget (type, name, f, val,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2255 select_cb, deactivate_cb, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2256 char *type;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2257 char *name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2258 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2259 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2260 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2261 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2262 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2263 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2264 GtkWidget *w = 0;
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2265 int menu_bar_p = strcmp (type, "menubar") == 0;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2266 int pop_up_p = strcmp (type, "popup") == 0;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2267
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2268 if (strcmp (type, "dialog") == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2269 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2270 w = create_dialog (val, select_cb, deactivate_cb);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2271 xg_set_screen (w, f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2272 gtk_window_set_transient_for (GTK_WINDOW (w),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2273 GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2274 gtk_window_set_destroy_with_parent (GTK_WINDOW (w), TRUE);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2275 gtk_widget_set_name (w, "emacs-dialog");
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
2276 gtk_window_set_modal (GTK_WINDOW (w), TRUE);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2277 }
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2278 else if (menu_bar_p || pop_up_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2279 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2280 w = create_menus (val->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2281 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2282 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2283 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2284 highlight_cb,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2285 pop_up_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2286 menu_bar_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2287 menu_bar_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2288 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2289 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2290 name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2291
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2292 /* Set the cursor to an arrow for popup menus when they are mapped.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2293 This is done by default for menu bar menus. */
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2294 if (pop_up_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2295 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2296 /* Must realize so the GdkWindow inside the widget is created. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2297 gtk_widget_realize (w);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2298 xg_set_cursor (w, FRAME_X_DISPLAY_INFO (f)->xg_cursor);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2299 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2300 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2301 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2302 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2303 fprintf (stderr, "bad type in xg_create_widget: %s, doing nothing\n",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2304 type);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2305 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2306
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2307 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2308 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2309
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2310 /* Return the label for menu item WITEM. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2311
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2312 static const char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2313 xg_get_menu_item_label (witem)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2314 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2315 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2316 GtkLabel *wlabel = GTK_LABEL (gtk_bin_get_child (GTK_BIN (witem)));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2317 return gtk_label_get_label (wlabel);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2318 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2319
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2320 /* Return non-zero if the menu item WITEM has the text LABEL. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2321
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2322 static int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2323 xg_item_label_same_p (witem, label)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2324 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2325 char *label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2326 {
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2327 int is_same = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2328 char *utf8_label = get_utf8_string (label);
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2329 const char *old_label = witem ? xg_get_menu_item_label (witem) : 0;
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2330
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2331 if (! old_label && ! utf8_label)
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2332 is_same = 1;
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2333 else if (old_label && utf8_label)
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2334 is_same = strcmp (utf8_label, old_label) == 0;
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2335
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2336 if (utf8_label && utf8_label != label) g_free (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2337
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2338 return is_same;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2339 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2340
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2341 /* Destroy widgets in LIST. */
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2342
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2343 static void
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2344 xg_destroy_widgets (list)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2345 GList *list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2346 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2347 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2348
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2349 for (iter = list; iter; iter = g_list_next (iter))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2350 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2351 GtkWidget *w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2352
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2353 /* Destroying the widget will remove it from the container it is in. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2354 gtk_widget_destroy (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2355 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2356 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2357
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2358 /* Update the top level names in MENUBAR (i.e. not submenus).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2359 F is the frame the menu bar belongs to.
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2360 *LIST is a list with the current menu bar names (menu item widgets).
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2361 ITER is the item within *LIST that shall be updated.
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2362 POS is the numerical position, starting at 0, of ITER in *LIST.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2363 VAL describes what the menu bar shall look like after the update.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2364 SELECT_CB is the callback to use when a menu item is selected.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2365 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2366 CL_DATA points to the callback data to be used for this menu bar.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2367
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2368 This function calls itself to walk through the menu bar names. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2369
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2370 static void
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2371 xg_update_menubar (menubar, f, list, iter, pos, val,
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2372 select_cb, highlight_cb, cl_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2373 GtkWidget *menubar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2374 FRAME_PTR f;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2375 GList **list;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2376 GList *iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2377 int pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2378 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2379 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2380 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2381 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2382 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2383 if (! iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2384 return;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2385 else if (iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2386 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2387 /* Item(s) have been removed. Remove all remaining items. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2388 xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2389
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2390 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2391 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2392 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2393 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2394 else if (! iter && val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2395 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2396 /* Item(s) added. Add all new items in one call. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2397 create_menus (val, f, select_cb, 0, highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2398 0, 1, 0, menubar, cl_data, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2399
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2400 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2401 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2402 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2403 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2404 /* Below this neither iter or val is NULL */
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2405 else if (xg_item_label_same_p (GTK_MENU_ITEM (iter->data), val->name))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2406 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2407 /* This item is still the same, check next item. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2408 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2409 iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2410 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2411 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2412 else /* This item is changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2413 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2414 GtkMenuItem *witem = GTK_MENU_ITEM (iter->data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2415 GtkMenuItem *witem2 = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2416 int val_in_menubar = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2417 int iter_in_new_menubar = 0;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2418 GList *iter2;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2419 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2420
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2421 /* See if the changed entry (val) is present later in the menu bar */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2422 for (iter2 = iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2423 iter2 && ! val_in_menubar;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2424 iter2 = g_list_next (iter2))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2425 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2426 witem2 = GTK_MENU_ITEM (iter2->data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2427 val_in_menubar = xg_item_label_same_p (witem2, val->name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2428 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2429
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2430 /* See if the current entry (iter) is present later in the
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2431 specification for the new menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2432 for (cur = val; cur && ! iter_in_new_menubar; cur = cur->next)
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2433 iter_in_new_menubar = xg_item_label_same_p (witem, cur->name);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2434
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2435 if (val_in_menubar && ! iter_in_new_menubar)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2436 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2437 int nr = pos;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2438
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2439 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2440 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2441 New: A C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2442 Remove B. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2443
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2444 gtk_widget_ref (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2445 gtk_container_remove (GTK_CONTAINER (menubar), GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2446 gtk_widget_destroy (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2447
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2448 /* Must get new list since the old changed. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2449 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2450 *list = iter = gtk_container_get_children (GTK_CONTAINER (menubar));
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2451 while (nr-- > 0) iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2452 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2453 else if (! val_in_menubar && ! iter_in_new_menubar)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2454 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2455 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2456 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2457 New: A X C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2458 Rename B to X. This might seem to be a strange thing to do,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2459 since if there is a menu under B it will be totally wrong for X.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2460 But consider editing a C file. Then there is a C-mode menu
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2461 (corresponds to B above).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2462 If then doing C-x C-f the minibuf menu (X above) replaces the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2463 C-mode menu. When returning from the minibuffer, we get
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2464 back the C-mode menu. Thus we do:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2465 Rename B to X (C-mode to minibuf menu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2466 Rename X to B (minibuf to C-mode menu).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2467 If the X menu hasn't been invoked, the menu under B
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2468 is up to date when leaving the minibuffer. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2469 GtkLabel *wlabel = GTK_LABEL (gtk_bin_get_child (GTK_BIN (witem)));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2470 char *utf8_label = get_utf8_string (val->name);
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2471 GtkWidget *submenu = gtk_menu_item_get_submenu (witem);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2472
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
2473 gtk_label_set_text (wlabel, utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2474
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2475 /* If this item has a submenu that has been detached, change
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2476 the title in the WM decorations also. */
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2477 if (submenu && gtk_menu_get_tearoff_state (GTK_MENU (submenu)))
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2478 /* Set the title of the detached window. */
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2479 gtk_menu_set_title (GTK_MENU (submenu), utf8_label);
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2480
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2481 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2482 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2483 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2484 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2485 else if (! val_in_menubar && iter_in_new_menubar)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2486 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2487 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2488 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2489 New: A X B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2490 Insert X. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2491
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2492 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2493 GList *group = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2494 GtkWidget *w = xg_create_one_menuitem (val,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2495 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2496 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2497 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2498 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2499 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2500
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2501 /* Create a possibly empty submenu for menu bar items, since some
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2502 themes don't highlight items correctly without it. */
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2503 GtkWidget *submenu = create_menus (NULL, f,
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2504 select_cb, NULL, highlight_cb,
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2505 0, 0, 0, 0, cl_data, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2506 gtk_widget_set_name (w, MENU_ITEM_NAME);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2507 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), w, pos);
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2508 gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), submenu);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2509
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2510 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2511 *list = iter = gtk_container_get_children (GTK_CONTAINER (menubar));
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2512 while (nr-- > 0) iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2513 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2514 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2515 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2516 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2517 else /* if (val_in_menubar && iter_in_new_menubar) */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2518 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2519 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2520 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2521 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2522 New: A C B
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2523 Move C before B */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2524
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2525 gtk_widget_ref (GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2526 gtk_container_remove (GTK_CONTAINER (menubar), GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2527 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2528 GTK_WIDGET (witem2), pos);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2529 gtk_widget_unref (GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2530
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2531 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2532 *list = iter = gtk_container_get_children (GTK_CONTAINER (menubar));
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2533 while (nr-- > 0) iter = g_list_next (iter);
76906
bb6e75c27940 (xg_update_menubar): Call g_list_next after moving
Jan Djärv <jan.h.d@swipnet.se>
parents: 75576
diff changeset
2534 if (iter) iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2535 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2536 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2537 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2538 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2539
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2540 /* Update the rest of the menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2541 xg_update_menubar (menubar, f, list, iter, pos, val,
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2542 select_cb, highlight_cb, cl_data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2543 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2544
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2545 /* Update the menu item W so it corresponds to VAL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2546 SELECT_CB is the callback to use when a menu item is selected.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2547 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2548 CL_DATA is the data to set in the widget for menu invokation. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2549
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2550 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2551 xg_update_menu_item (val, w, select_cb, highlight_cb, cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2552 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2553 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2554 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2555 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2556 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2557 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2558 GtkWidget *wchild;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2559 GtkLabel *wlbl = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2560 GtkLabel *wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2561 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2562 char *utf8_key;
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2563 const char *old_label = 0;
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2564 const char *old_key = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2565 xg_menu_item_cb_data *cb_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2566
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2567 wchild = gtk_bin_get_child (GTK_BIN (w));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2568 utf8_label = get_utf8_string (val->name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2569 utf8_key = get_utf8_string (val->key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2570
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2571 /* See if W is a menu item with a key. See make_menu_item above. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2572 if (GTK_IS_HBOX (wchild))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2573 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2574 GList *list = gtk_container_get_children (GTK_CONTAINER (wchild));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2575
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2576 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2577 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2578 g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2579
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2580 if (! utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2581 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2582 /* Remove the key and keep just the label. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2583 gtk_widget_ref (GTK_WIDGET (wlbl));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2584 gtk_container_remove (GTK_CONTAINER (w), wchild);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2585 gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (wlbl));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2586 wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2587 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2588
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2589 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2590 else /* Just a label. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2591 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2592 wlbl = GTK_LABEL (wchild);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2593
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2594 /* Check if there is now a key. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2595 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2596 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2597 GtkWidget *wtoadd = make_widget_for_menu_item (utf8_label, utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2598 GList *list = gtk_container_get_children (GTK_CONTAINER (wtoadd));
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2599
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2600 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2601 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2602 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2603
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2604 gtk_container_remove (GTK_CONTAINER (w), wchild);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2605 gtk_container_add (GTK_CONTAINER (w), wtoadd);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2606 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2607 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2608
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2609
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2610 if (wkey) old_key = gtk_label_get_label (wkey);
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2611 if (wlbl) old_label = gtk_label_get_label (wlbl);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2612
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2613 if (wkey && utf8_key && (! old_key || strcmp (utf8_key, old_key) != 0))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2614 gtk_label_set_text (wkey, utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2615
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2616 if (! old_label || strcmp (utf8_label, old_label) != 0)
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
2617 gtk_label_set_text (wlbl, utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2618
49488
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2619 if (utf8_key && utf8_key != val->key) g_free (utf8_key);
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2620 if (utf8_label && utf8_label != val->name) g_free (utf8_label);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2621
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2622 if (! val->enabled && GTK_WIDGET_SENSITIVE (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2623 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2624 else if (val->enabled && ! GTK_WIDGET_SENSITIVE (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2625 gtk_widget_set_sensitive (w, TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2626
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2627 cb_data = (xg_menu_item_cb_data*) g_object_get_data (G_OBJECT (w),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2628 XG_ITEM_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2629 if (cb_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2630 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2631 cb_data->call_data = val->call_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2632 cb_data->help = val->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2633 cb_data->cl_data = cl_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2634
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2635 /* We assume the callback functions don't change. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2636 if (val->call_data && ! val->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2637 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2638 /* This item shall have a select callback. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2639 if (! cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2640 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2641 = g_signal_connect (G_OBJECT (w), "activate",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2642 select_cb, cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2643 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2644 else if (cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2645 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2646 g_signal_handler_disconnect (w, cb_data->select_id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2647 cb_data->select_id = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2648 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2649 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2650 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2651
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2652 /* Update the toggle menu item W so it corresponds to VAL. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2653
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2654 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2655 xg_update_toggle_item (val, w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2656 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2657 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2658 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2659 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), val->selected);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2660 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2661
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2662 /* Update the radio menu item W so it corresponds to VAL. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2663
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2664 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2665 xg_update_radio_item (val, w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2666 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2667 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2668 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2669 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), val->selected);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2670 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2671
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2672 /* Update the sub menu SUBMENU and all its children so it corresponds to VAL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2673 SUBMENU may be NULL, in that case a new menu is created.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2674 F is the frame the menu bar belongs to.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2675 VAL describes the contents of the menu bar.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2676 SELECT_CB is the callback to use when a menu item is selected.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2677 DEACTIVATE_CB is the callback to use when a sub menu is not shown anymore.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2678 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2679 CL_DATA is the call back data to use for any newly created items.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2680
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2681 Returns the updated submenu widget, that is SUBMENU unless SUBMENU
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2682 was NULL. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2683
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2684 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2685 xg_update_submenu (submenu, f, val,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2686 select_cb, deactivate_cb, highlight_cb, cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2687 GtkWidget *submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2688 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2689 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2690 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2691 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2692 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2693 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2694 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2695 GtkWidget *newsub = submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2696 GList *list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2697 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2698 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2699 int has_tearoff_p = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2700 GList *first_radio = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2701
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2702 if (submenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2703 list = gtk_container_get_children (GTK_CONTAINER (submenu));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2704
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2705 for (cur = val, iter = list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2706 cur && iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2707 iter = g_list_next (iter), cur = cur->next)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2708 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2709 GtkWidget *w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2710
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2711 /* Skip tearoff items, they have no counterpart in val. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2712 if (GTK_IS_TEAROFF_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2713 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2714 has_tearoff_p = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2715 iter = g_list_next (iter);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2716 if (iter) w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2717 else break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2718 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2719
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2720 /* Remember first radio button in a group. If we get a mismatch in
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2721 a radio group we must rebuild the whole group so that the connections
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2722 in GTK becomes correct. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2723 if (cur->button_type == BUTTON_TYPE_RADIO && ! first_radio)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2724 first_radio = iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2725 else if (cur->button_type != BUTTON_TYPE_RADIO
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2726 && ! GTK_IS_RADIO_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2727 first_radio = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2728
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2729 if (GTK_IS_SEPARATOR_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2730 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2731 if (! xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2732 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2733 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2734 else if (GTK_IS_CHECK_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2735 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2736 if (cur->button_type != BUTTON_TYPE_TOGGLE)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2737 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2738 xg_update_toggle_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2739 xg_update_menu_item (cur, w, select_cb, highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2740 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2741 else if (GTK_IS_RADIO_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2742 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2743 if (cur->button_type != BUTTON_TYPE_RADIO)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2744 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2745 xg_update_radio_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2746 xg_update_menu_item (cur, w, select_cb, highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2747 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2748 else if (GTK_IS_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2749 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2750 GtkMenuItem *witem = GTK_MENU_ITEM (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2751 GtkWidget *sub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2752
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2753 if (cur->button_type != BUTTON_TYPE_NONE ||
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2754 xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2755 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2756
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2757 xg_update_menu_item (cur, w, select_cb, highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2758
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2759 sub = gtk_menu_item_get_submenu (witem);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2760 if (sub && ! cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2761 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2762 /* Not a submenu anymore. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2763 gtk_widget_ref (sub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2764 gtk_menu_item_remove_submenu (witem);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2765 gtk_widget_destroy (sub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2766 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2767 else if (cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2768 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2769 GtkWidget *nsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2770
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2771 nsub = xg_update_submenu (sub, f, cur->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2772 select_cb, deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2773 highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2774
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2775 /* If this item just became a submenu, we must set it. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2776 if (nsub != sub)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2777 gtk_menu_item_set_submenu (witem, nsub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2778 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2779 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2780 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2781 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2782 /* Structural difference. Remove everything from here and down
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2783 in SUBMENU. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2784 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2785 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2786 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2787
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2788 /* Remove widgets from first structual change. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2789 if (iter)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2790 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2791 /* If we are adding new menu items below, we must remove from
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2792 first radio button so that radio groups become correct. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2793 if (cur && first_radio) xg_destroy_widgets (first_radio);
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2794 else xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2795 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2796
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2797 if (cur)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2798 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2799 /* More items added. Create them. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2800 newsub = create_menus (cur,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2801 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2802 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2803 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2804 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2805 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2806 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2807 ! has_tearoff_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2808 submenu,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2809 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2810 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2811 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2812
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2813 if (list) g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2814
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2815 return newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2816 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2817
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2818 /* Update the MENUBAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2819 F is the frame the menu bar belongs to.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2820 VAL describes the contents of the menu bar.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2821 If DEEP_P is non-zero, rebuild all but the top level menu names in
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2822 the MENUBAR. If DEEP_P is zero, just rebuild the names in the menubar.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2823 SELECT_CB is the callback to use when a menu item is selected.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2824 DEACTIVATE_CB is the callback to use when a sub menu is not shown anymore.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2825 HIGHLIGHT_CB is the callback to call when entering/leaving menu items. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2826
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2827 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2828 xg_modify_menubar_widgets (menubar, f, val, deep_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2829 select_cb, deactivate_cb, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2830 GtkWidget *menubar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2831 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2832 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2833 int deep_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2834 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2835 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2836 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2837 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2838 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2839 GList *list = gtk_container_get_children (GTK_CONTAINER (menubar));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2840
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2841 if (! list) return;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2842
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2843 cl_data = (xg_menu_cb_data*) g_object_get_data (G_OBJECT (menubar),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2844 XG_FRAME_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2845
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2846 xg_update_menubar (menubar, f, &list, list, 0, val->contents,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2847 select_cb, highlight_cb, cl_data);
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2848
64783
0975467abc17 * gtkutil.c (xg_modify_menubar_widgets): Remove semicolon that
Jan Djärv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
2849 if (deep_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2850 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2851 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2852
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2853 /* Update all sub menus.
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2854 We must keep the submenus (GTK menu item widgets) since the
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2855 X Window in the XEvent that activates the menu are those widgets. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2856
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2857 /* Update cl_data, menu_item things in F may have changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2858 update_cl_data (cl_data, f, highlight_cb);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2859
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2860 for (cur = val->contents; cur; cur = cur->next)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2861 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2862 GList *iter;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2863 GtkWidget *sub = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2864 GtkWidget *newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2865 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2866
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2867 /* Find sub menu that corresponds to val and update it. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2868 for (iter = list ; iter; iter = g_list_next (iter))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2869 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2870 witem = GTK_MENU_ITEM (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2871 if (xg_item_label_same_p (witem, cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2872 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2873 sub = gtk_menu_item_get_submenu (witem);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2874 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2875 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2876 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2877
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2878 newsub = xg_update_submenu (sub,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2879 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2880 cur->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2881 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2882 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2883 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2884 cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2885 /* sub may still be NULL. If we just updated non deep and added
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2886 a new menu bar item, it has no sub menu yet. So we set the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2887 newly created sub menu under witem. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2888 if (newsub != sub)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2889 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2890 xg_set_screen (newsub, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2891 gtk_menu_item_set_submenu (witem, newsub);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2892 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2893 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2894 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2895
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2896 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2897 gtk_widget_show_all (menubar);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2898 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2899
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2900 /* Recompute all the widgets of frame F, when the menu bar has been
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2901 changed. Value is non-zero if widgets were updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2902
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2903 int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2904 xg_update_frame_menubar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2905 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2906 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2907 struct x_output *x = f->output_data.x;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2908 GtkRequisition req;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2909
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2910 if (!x->menubar_widget || GTK_WIDGET_MAPPED (x->menubar_widget))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2911 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2912
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2913 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2914
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2915 gtk_box_pack_start (GTK_BOX (x->vbox_widget), x->menubar_widget,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2916 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2917 gtk_box_reorder_child (GTK_BOX (x->vbox_widget), x->menubar_widget, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2918
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2919 gtk_widget_show_all (x->menubar_widget);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2920 gtk_widget_size_request (x->menubar_widget, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2921
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2922 FRAME_MENUBAR_HEIGHT (f) = req.height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2923
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2924 /* The height has changed, resize outer widget and set columns
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2925 rows to what we had before adding the menu bar. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
2926 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2927
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2928 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2929 UNBLOCK_INPUT;
50106
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
2930
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
2931 return 1;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2932 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2933
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2934 /* Get rid of the menu bar of frame F, and free its storage.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2935 This is used when deleting a frame, and when turning off the menu bar. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2936
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2937 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2938 free_frame_menubar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2939 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2940 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2941 struct x_output *x = f->output_data.x;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2942
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2943 if (x->menubar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2944 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2945 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2946
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2947 gtk_container_remove (GTK_CONTAINER (x->vbox_widget), x->menubar_widget);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2948 /* The menubar and its children shall be deleted when removed from
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2949 the container. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2950 x->menubar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2951 FRAME_MENUBAR_HEIGHT (f) = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2952
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2953 /* The height has changed, resize outer widget and set columns
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2954 rows to what we had before removing the menu bar. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
2955 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2956
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2957 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2958 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2959 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2960 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2961
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2962
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2963
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2964 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2965 Scroll bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2966 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2967
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2968
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2969 /* Setting scroll bar values invokes the callback. Use this variable
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2970 to indicate that callback should do nothing. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2971
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2972 int xg_ignore_gtk_scrollbar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2973
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
2974 /* Xlib's `Window' fits in 32 bits. But we want to store pointers, and they
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
2975 may be larger than 32 bits. Keep a mapping from integer index to widget
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
2976 pointers to get around the 32 bit limitation. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2977
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2978 static struct
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2979 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2980 GtkWidget **widgets;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2981 int max_size;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2982 int used;
49419
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
2983 } id_to_widget;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2984
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2985 /* Grow this much every time we need to allocate more */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2986
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2987 #define ID_TO_WIDGET_INCR 32
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2988
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2989 /* Store the widget pointer W in id_to_widget and return the integer index. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2990
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2991 static int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2992 xg_store_widget_in_map (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2993 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2994 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2995 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2996
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2997 if (id_to_widget.max_size == id_to_widget.used)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2998 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2999 int new_size = id_to_widget.max_size + ID_TO_WIDGET_INCR;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3000
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3001 id_to_widget.widgets = xrealloc (id_to_widget.widgets,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3002 sizeof (GtkWidget *)*new_size);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3003
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3004 for (i = id_to_widget.max_size; i < new_size; ++i)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3005 id_to_widget.widgets[i] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3006 id_to_widget.max_size = new_size;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3007 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3008
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3009 /* Just loop over the array and find a free place. After all,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3010 how many scroll bars are we creating? Should be a small number.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3011 The check above guarantees we will find a free place. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3012 for (i = 0; i < id_to_widget.max_size; ++i)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3013 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3014 if (! id_to_widget.widgets[i])
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3015 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3016 id_to_widget.widgets[i] = w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3017 ++id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3018
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3019 return i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3020 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3021 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3022
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3023 /* Should never end up here */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3024 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3025 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3026
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3027 /* Remove pointer at IDX from id_to_widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3028 Called when scroll bar is destroyed. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3029
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3030 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3031 xg_remove_widget_from_map (idx)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3032 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3033 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3034 if (idx < id_to_widget.max_size && id_to_widget.widgets[idx] != 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3035 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3036 id_to_widget.widgets[idx] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3037 --id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3038 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3039 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3040
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3041 /* Get the widget pointer at IDX from id_to_widget. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3042
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3043 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3044 xg_get_widget_from_map (idx)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3045 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3046 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3047 if (idx < id_to_widget.max_size && id_to_widget.widgets[idx] != 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3048 return id_to_widget.widgets[idx];
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3049
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3050 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3051 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3052
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3053 /* Return the scrollbar id for X Window WID on display DPY.
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3054 Return -1 if WID not in id_to_widget. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3055
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3056 int
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3057 xg_get_scroll_id_for_window (dpy, wid)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3058 Display *dpy;
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3059 Window wid;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3060 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3061 int idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3062 GtkWidget *w;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3063
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3064 w = xg_win_to_widget (dpy, wid);
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3065
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3066 if (w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3067 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3068 for (idx = 0; idx < id_to_widget.max_size; ++idx)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3069 if (id_to_widget.widgets[idx] == w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3070 return idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3071 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3072
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3073 return -1;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3074 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3075
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3076 /* Callback invoked when scroll bar WIDGET is destroyed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3077 DATA is the index into id_to_widget for WIDGET.
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
3078 We free pointer to last scroll bar values here and remove the index. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3079
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3080 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3081 xg_gtk_scroll_destroy (widget, data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3082 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3083 gpointer data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3084 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3085 gpointer p;
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3086 int id = (int) (EMACS_INT) data; /* The EMACS_INT cast avoids a warning. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3087
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3088 p = g_object_get_data (G_OBJECT (widget), XG_LAST_SB_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3089 if (p) xfree (p);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3090 xg_remove_widget_from_map (id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3091 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3092
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3093 /* Callback for button press/release events. Used to start timer so that
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3094 the scroll bar repetition timer in GTK gets handeled.
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3095 Also, sets bar->dragging to Qnil when dragging (button release) is done.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3096 WIDGET is the scroll bar widget the event is for (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3097 EVENT contains the event.
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3098 USER_DATA points to the struct scrollbar structure.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3099
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3100 Returns FALSE to tell GTK that it shall continue propagate the event
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3101 to widgets. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3102
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3103 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3104 scroll_bar_button_cb (widget, event, user_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3105 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3106 GdkEventButton *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3107 gpointer user_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3108 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3109 if (event->type == GDK_BUTTON_PRESS && ! xg_timer)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3110 xg_start_timer ();
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3111 else if (event->type == GDK_BUTTON_RELEASE)
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3112 {
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3113 struct scroll_bar *bar = (struct scroll_bar *) user_data;
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3114 if (xg_timer) xg_stop_timer ();
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3115 bar->dragging = Qnil;
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3116 }
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
3117
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3118 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3119 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3120
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3121 /* Create a scroll bar widget for frame F. Store the scroll bar
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3122 in BAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3123 SCROLL_CALLBACK is the callback to invoke when the value of the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3124 bar changes.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3125 SCROLL_BAR_NAME is the name we use for the scroll bar. Can be used
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3126 to set resources for the widget. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3127
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3128 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3129 xg_create_scroll_bar (f, bar, scroll_callback, scroll_bar_name)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3130 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3131 struct scroll_bar *bar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3132 GCallback scroll_callback;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3133 char *scroll_bar_name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3134 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3135 GtkWidget *wscroll;
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3136 GtkWidget *webox;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3137 GtkObject *vadj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3138 int scroll_id;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3139
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3140 /* Page, step increment values are not so important here, they
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3141 will be corrected in x_set_toolkit_scroll_bar_thumb. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3142 vadj = gtk_adjustment_new (XG_SB_MIN, XG_SB_MIN, XG_SB_MAX,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3143 0.1, 0.1, 0.1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3144
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3145 wscroll = gtk_vscrollbar_new (GTK_ADJUSTMENT (vadj));
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3146 webox = gtk_event_box_new ();
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3147 gtk_widget_set_name (wscroll, scroll_bar_name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3148 gtk_range_set_update_policy (GTK_RANGE (wscroll), GTK_UPDATE_CONTINUOUS);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3149
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3150 scroll_id = xg_store_widget_in_map (wscroll);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3151
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50333
diff changeset
3152 g_signal_connect (G_OBJECT (wscroll),
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3153 "value-changed",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3154 scroll_callback,
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50333
diff changeset
3155 (gpointer) bar);
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3156 /* The EMACS_INT cast avoids a warning. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3157 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3158 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3159 G_CALLBACK (xg_gtk_scroll_destroy),
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3160 (gpointer) (EMACS_INT) scroll_id);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3161
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3162 /* Connect to button press and button release to detect if any scroll bar
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3163 has the pointer. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3164 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3165 "button-press-event",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3166 G_CALLBACK (scroll_bar_button_cb),
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50333
diff changeset
3167 (gpointer) bar);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3168 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3169 "button-release-event",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3170 G_CALLBACK (scroll_bar_button_cb),
50521
3b4cda88d7ef * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
Jan Djärv <jan.h.d@swipnet.se>
parents: 50333
diff changeset
3171 (gpointer) bar);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3172
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3173 /* The scroll bar widget does not draw on a window of its own. Instead
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3174 it draws on the parent window, in this case the edit widget. So
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3175 whenever the edit widget is cleared, the scroll bar needs to redraw
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3176 also, which causes flicker. Put an event box between the edit widget
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3177 and the scroll bar, so the scroll bar instead draws itself on the
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3178 event box window. */
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3179 gtk_fixed_put (GTK_FIXED (f->output_data.x->edit_widget), webox, -1, -1);
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3180 gtk_container_add (GTK_CONTAINER (webox), wscroll);
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
3181
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3182
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3183 /* Set the cursor to an arrow. */
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3184 xg_set_cursor (webox, FRAME_X_DISPLAY_INFO (f)->xg_cursor);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3185
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3186 bar->x_window = scroll_id;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3187 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3188
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3189 /* Make the scroll bar represented by SCROLLBAR_ID visible. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3190
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3191 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3192 xg_show_scroll_bar (scrollbar_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3193 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3194 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3195 GtkWidget *w = xg_get_widget_from_map (scrollbar_id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3196 if (w)
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3197 gtk_widget_show_all (gtk_widget_get_parent (w));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3198 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3199
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3200 /* Remove the scroll bar represented by SCROLLBAR_ID from the frame F. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3201
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3202 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3203 xg_remove_scroll_bar (f, scrollbar_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3204 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3205 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3206 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3207 GtkWidget *w = xg_get_widget_from_map (scrollbar_id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3208 if (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3209 {
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3210 GtkWidget *wparent = gtk_widget_get_parent (w);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3211 gtk_widget_destroy (w);
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3212 gtk_widget_destroy (wparent);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3213 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3214 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3215 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3216
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3217 /* Update the position of the vertical scroll bar represented by SCROLLBAR_ID
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3218 in frame F.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3219 TOP/LEFT are the new pixel positions where the bar shall appear.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3220 WIDTH, HEIGHT is the size in pixels the bar shall have. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3221
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3222 void
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3223 xg_update_scrollbar_pos (f, scrollbar_id, top, left, width, height)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3224 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3225 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3226 int top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3227 int left;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3228 int width;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3229 int height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3230 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3231
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3232 GtkWidget *wscroll = xg_get_widget_from_map (scrollbar_id);
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3233
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3234 if (wscroll)
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3235 {
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3236 GtkWidget *wfixed = f->output_data.x->edit_widget;
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3237 GtkWidget *wparent = gtk_widget_get_parent (wscroll);
55342
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3238
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3239 /* Move and resize to new values. */
60553
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3240 gtk_fixed_move (GTK_FIXED (wfixed), wparent, left, top);
55342
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3241 gtk_widget_set_size_request (wscroll, width, height);
60553
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3242 gtk_widget_queue_draw (wparent);
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3243 gdk_window_process_all_updates ();
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3244 /* GTK does not redraw until the main loop is entered again, but
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3245 if there are no X events pending we will not enter it. So we sync
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3246 here to get some events. */
5ace6337c8fa * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
Jan Djärv <jan.h.d@swipnet.se>
parents: 60291
diff changeset
3247 x_sync (f);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3248 SET_FRAME_GARBAGED (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3249 cancel_mouse_face (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3250 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3251 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3252
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3253 /* Set the thumb size and position of scroll bar BAR. We are currently
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3254 displaying PORTION out of a whole WHOLE, and our position POSITION. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3255
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3256 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3257 xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3258 struct scroll_bar *bar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3259 int portion, position, whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3260 {
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3261 GtkWidget *wscroll = xg_get_widget_from_map (bar->x_window);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3262
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3263 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3264
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3265 if (wscroll && NILP (bar->dragging))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3266 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3267 GtkAdjustment *adj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3268 gdouble shown;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3269 gdouble top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3270 int size, value;
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3271 int new_step;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3272 int changed = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3273
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3274 adj = gtk_range_get_adjustment (GTK_RANGE (wscroll));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3275
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3276 /* We do the same as for MOTIF in xterm.c, assume 30 chars per line
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3277 rather than the real portion value. This makes the thumb less likely
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3278 to resize and that looks better. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
3279 portion = WINDOW_TOTAL_LINES (XWINDOW (bar->window)) * 30;
50177
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3280 /* When the thumb is at the bottom, position == whole.
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3281 So we need to increase `whole' to make space for the thumb. */
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3282 whole += portion;
297925dd73b1 New approach to scrolling and scroll bars for better redraw and smoother
Jan Djärv <jan.h.d@swipnet.se>
parents: 50130
diff changeset
3283
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3284 if (whole <= 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3285 top = 0, shown = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3286 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3287 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3288 top = (gdouble) position / whole;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3289 shown = (gdouble) portion / whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3290 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3291
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3292 size = shown * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3293 size = min (size, XG_SB_RANGE);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3294 size = max (size, 1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3295
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3296 value = top * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3297 value = min (value, XG_SB_MAX - size);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3298 value = max (value, XG_SB_MIN);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3299
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3300 /* Assume all lines are of equal size. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
3301 new_step = size / max (1, FRAME_LINES (f));
50178
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3302
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3303 if ((int) adj->page_size != size
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3304 || (int) adj->step_increment != new_step)
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3305 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3306 adj->page_size = size;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3307 adj->step_increment = new_step;
50178
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3308 /* Assume a page increment is about 95% of the page size */
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3309 adj->page_increment = (int) (0.95*adj->page_size);
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3310 changed = 1;
50178
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3311 }
61194aef8668 * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
Jan Djärv <jan.h.d@swipnet.se>
parents: 50177
diff changeset
3312
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3313 if (changed || (int) gtk_range_get_value (GTK_RANGE (wscroll)) != value)
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3314 {
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3315 GtkWidget *wfixed = f->output_data.x->edit_widget;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3316
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3317 BLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3318
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3319 /* gtk_range_set_value invokes the callback. Set
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3320 ignore_gtk_scrollbar to make the callback do nothing */
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3321 xg_ignore_gtk_scrollbar = 1;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3322
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3323 if ((int) gtk_range_get_value (GTK_RANGE (wscroll)) != value)
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3324 gtk_range_set_value (GTK_RANGE (wscroll), (gdouble)value);
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3325 else if (changed)
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3326 gtk_adjustment_changed (adj);
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3327
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3328 xg_ignore_gtk_scrollbar = 0;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3329
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3330 UNBLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3331 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3332 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3333 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3334
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3335
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3336 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3337 Tool bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3338 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3339 /* The key for the data we put in the GtkImage widgets. The data is
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3340 the image used by Emacs. We use this to see if we need to update
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3341 the GtkImage with a new image. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3342 #define XG_TOOL_BAR_IMAGE_DATA "emacs-tool-bar-image"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3343
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3344 /* The key for storing the latest modifiers so the activate callback can
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3345 get them. */
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3346 #define XG_TOOL_BAR_LAST_MODIFIER "emacs-tool-bar-modifier"
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3347
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3348 /* The key for storing the button widget in its proxy menu item. */
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3349 #define XG_TOOL_BAR_PROXY_BUTTON "emacs-tool-bar-proxy-button"
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3350
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3351 /* The key for the data we put in the GtkImage widgets. The data is
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3352 the stock name used by Emacs. We use this to see if we need to update
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3353 the GtkImage with a new image. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3354 #define XG_TOOL_BAR_STOCK_NAME "emacs-tool-bar-stock-name"
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3355
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3356 /* As above, but this is used for named theme widgets, as opposed to
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3357 stock items. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3358 #define XG_TOOL_BAR_ICON_NAME "emacs-tool-bar-icon-name"
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3359
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3360 /* Callback function invoked when a tool bar item is pressed.
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3361 W is the button widget in the tool bar that got pressed,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3362 CLIENT_DATA is an integer that is the index of the button in the
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3363 tool bar. 0 is the first button. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3364
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3365 static gboolean
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3366 xg_tool_bar_button_cb (widget, event, user_data)
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3367 GtkWidget *widget;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3368 GdkEventButton *event;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3369 gpointer user_data;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3370 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3371 /* Casts to avoid warnings when gpointer is 64 bits and int is 32 bits */
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3372 gpointer ptr = (gpointer) (EMACS_INT) event->state;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3373 g_object_set_data (G_OBJECT (widget), XG_TOOL_BAR_LAST_MODIFIER, ptr);
68922
4f694ddb3ed0 Indentation fix
Jan Djärv <jan.h.d@swipnet.se>
parents: 68879
diff changeset
3374 return FALSE;
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3375 }
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3376
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3377
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3378 /* Callback function invoked when a tool bar item is pressed.
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3379 W is the button widget in the tool bar that got pressed,
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3380 CLIENT_DATA is an integer that is the index of the button in the
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3381 tool bar. 0 is the first button. */
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3382
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3383 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3384 xg_tool_bar_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3385 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3386 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3387 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3388 /* The EMACS_INT cast avoids a warning. */
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3389 int idx = (int) (EMACS_INT) client_data;
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3390 int mod = (int) (EMACS_INT) g_object_get_data (G_OBJECT (w),
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3391 XG_TOOL_BAR_LAST_MODIFIER);
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3392
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3393 FRAME_PTR f = (FRAME_PTR) g_object_get_data (G_OBJECT (w), XG_FRAME_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3394 Lisp_Object key, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3395 struct input_event event;
51569
e7bd8581e306 (xg_tool_bar_callback): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51432
diff changeset
3396 EVENT_INIT (event);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3397
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3398 if (! f || ! f->n_tool_bar_items || NILP (f->tool_bar_items))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3399 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3400
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3401 idx *= TOOL_BAR_ITEM_NSLOTS;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3402
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3403 key = AREF (f->tool_bar_items, idx + TOOL_BAR_ITEM_KEY);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3404 XSETFRAME (frame, f);
78538
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3405
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3406 /* We generate two events here. The first one is to set the prefix
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3407 to `(tool_bar)', see keyboard.c. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3408 event.kind = TOOL_BAR_EVENT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3409 event.frame_or_window = frame;
78538
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3410 event.arg = frame;
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3411 kbd_buffer_store_event (&event);
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3412
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3413 event.kind = TOOL_BAR_EVENT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3414 event.frame_or_window = frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3415 event.arg = key;
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3416 /* Convert between the modifier bits GDK uses and the modifier bits
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3417 Emacs uses. This assumes GDK an X masks are the same, which they are when
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3418 this is written. */
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3419 event.modifiers = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), mod);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3420 kbd_buffer_store_event (&event);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3421 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3422
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3423 /* Callback function invoked when a tool bar item is pressed in a detached
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3424 tool bar or the overflow drop down menu.
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3425 We just call xg_tool_bar_callback.
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3426 W is the menu item widget that got pressed,
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3427 CLIENT_DATA is an integer that is the index of the button in the
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3428 tool bar. 0 is the first button. */
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3429
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3430 static void
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3431 xg_tool_bar_proxy_callback (w, client_data)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3432 GtkWidget *w;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3433 gpointer client_data;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3434 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3435 GtkWidget *wbutton = GTK_WIDGET (g_object_get_data (G_OBJECT (w),
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3436 XG_TOOL_BAR_PROXY_BUTTON));
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3437 xg_tool_bar_callback (wbutton, client_data);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3438 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3439
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3440 /* This callback is called when a tool item should create a proxy item,
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3441 such as for the overflow menu. Also called when the tool bar is detached.
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3442 If we don't create a proxy menu item, the detached tool bar will be
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3443 blank. */
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3444
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3445 static gboolean
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3446 xg_tool_bar_menu_proxy (toolitem, user_data)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3447 GtkToolItem *toolitem;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3448 gpointer user_data;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3449 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3450 GtkWidget *weventbox = gtk_bin_get_child (GTK_BIN (toolitem));
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3451 GtkButton *wbutton = GTK_BUTTON (gtk_bin_get_child (GTK_BIN (weventbox)));
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3452 GtkWidget *wmenuitem = gtk_image_menu_item_new ();
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3453 GtkWidget *wmenuimage;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3454
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3455 if (gtk_button_get_use_stock (wbutton))
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3456 wmenuimage = gtk_image_new_from_stock (gtk_button_get_label (wbutton),
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3457 GTK_ICON_SIZE_MENU);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3458 else
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3459 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3460 GtkImage *wimage = GTK_IMAGE (gtk_bin_get_child (GTK_BIN (wbutton)));
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3461 GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (wbutton));
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3462 GtkImageType store_type = gtk_image_get_storage_type (wimage);
85938
d7e05ac913d8 (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 84621
diff changeset
3463
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3464 if (store_type == GTK_IMAGE_STOCK)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3465 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3466 gchar *stock_id;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3467 gtk_image_get_stock (wimage, &stock_id, NULL);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3468 wmenuimage = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3469 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3470 else if (store_type == GTK_IMAGE_ICON_SET)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3471 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3472 GtkIconSet *icon_set;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3473 gtk_image_get_icon_set (wimage, &icon_set, NULL);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3474 wmenuimage = gtk_image_new_from_icon_set (icon_set,
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3475 GTK_ICON_SIZE_MENU);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3476 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3477 else if (store_type == GTK_IMAGE_PIXBUF)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3478 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3479 gint width, height;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3480
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3481 if (settings &&
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3482 gtk_icon_size_lookup_for_settings (settings, GTK_ICON_SIZE_MENU,
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3483 &width, &height))
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3484 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3485 GdkPixbuf *src_pixbuf, *dest_pixbuf;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3486
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3487 src_pixbuf = gtk_image_get_pixbuf (wimage);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3488 dest_pixbuf = gdk_pixbuf_scale_simple (src_pixbuf, width, height,
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3489 GDK_INTERP_BILINEAR);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3490
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3491 wmenuimage = gtk_image_new_from_pixbuf (dest_pixbuf);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3492 }
79340
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3493 else
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3494 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3495 fprintf (stderr, "internal error: GTK_IMAGE_PIXBUF failed\n");
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3496 abort ();
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3497 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3498 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3499 else if (store_type == GTK_IMAGE_ICON_NAME)
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3500 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3501 const gchar *icon_name;
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3502 GtkIconSize icon_size;
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3503
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3504 gtk_image_get_icon_name (wimage, &icon_name, &icon_size);
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3505 wmenuimage = gtk_image_new_from_icon_name (icon_name,
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3506 GTK_ICON_SIZE_MENU);
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3507 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3508 else
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3509 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3510 fprintf (stderr, "internal error: store_type is %d\n", store_type);
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3511 abort ();
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3512 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3513 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3514 if (wmenuimage)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3515 gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (wmenuitem), wmenuimage);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3516
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3517 g_signal_connect (G_OBJECT (wmenuitem),
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3518 "activate",
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3519 GTK_SIGNAL_FUNC (xg_tool_bar_proxy_callback),
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3520 user_data);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3521
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3522 g_object_set_data (G_OBJECT (wmenuitem), XG_TOOL_BAR_PROXY_BUTTON,
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3523 (gpointer) wbutton);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3524 gtk_tool_item_set_proxy_menu_item (toolitem, "Emacs toolbar item", wmenuitem);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3525
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3526 return TRUE;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3527 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3528
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3529 /* This callback is called when a tool bar is detached. We must set
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3530 the height of the tool bar to zero when this happens so frame sizes
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3531 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3532 WBOX is the handle box widget that enables detach/attach of the tool bar.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3533 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3534 CLIENT_DATA is a pointer to the frame the tool bar belongs to. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3535
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3536 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3537 xg_tool_bar_detach_callback (wbox, w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3538 GtkHandleBox *wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3539 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3540 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3541 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3542 FRAME_PTR f = (FRAME_PTR) client_data;
68879
3249a3dd3284 * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
Jan Djärv <jan.h.d@swipnet.se>
parents: 68874
diff changeset
3543 extern int x_gtk_whole_detached_tool_bar;
3249a3dd3284 * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
Jan Djärv <jan.h.d@swipnet.se>
parents: 68874
diff changeset
3544
3249a3dd3284 * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
Jan Djärv <jan.h.d@swipnet.se>
parents: 68874
diff changeset
3545 g_object_set (G_OBJECT (w), "show-arrow", !x_gtk_whole_detached_tool_bar,
3249a3dd3284 * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
Jan Djärv <jan.h.d@swipnet.se>
parents: 68874
diff changeset
3546 NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3547
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3548 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3549 {
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3550 FRAME_X_OUTPUT (f)->toolbar_detached = 1;
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3551
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3552 /* When detaching a tool bar, not everything dissapear. There are
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3553 a few pixels left that are used to drop the tool bar back into
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3554 place. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3555 FRAME_TOOLBAR_HEIGHT (f) = 2;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3556
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3557 /* The height has changed, resize outer widget and set columns
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3558 rows to what we had before detaching the tool bar. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
3559 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3560 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3561 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3562
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3563 /* This callback is called when a tool bar is reattached. We must set
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3564 the height of the tool bar when this happens so frame sizes
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3565 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3566 WBOX is the handle box widget that enables detach/attach of the tool bar.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3567 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3568 CLIENT_DATA is a pointer to the frame the tool bar belongs to. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3569
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3570 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3571 xg_tool_bar_attach_callback (wbox, w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3572 GtkHandleBox *wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3573 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3574 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3575 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3576 FRAME_PTR f = (FRAME_PTR) client_data;
68879
3249a3dd3284 * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
Jan Djärv <jan.h.d@swipnet.se>
parents: 68874
diff changeset
3577 g_object_set (G_OBJECT (w), "show-arrow", TRUE, NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3578
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3579 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3580 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3581 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3582
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3583 FRAME_X_OUTPUT (f)->toolbar_detached = 0;
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3584
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3585 gtk_widget_size_request (w, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3586 FRAME_TOOLBAR_HEIGHT (f) = req.height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3587
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3588 /* The height has changed, resize outer widget and set columns
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3589 rows to what we had before attaching the tool bar. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
3590 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3591 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3592 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3593
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3594 /* This callback is called when the mouse enters or leaves a tool bar item.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3595 It is used for displaying and hiding the help text.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3596 W is the tool bar item, a button.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3597 EVENT is either an enter event or leave event.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3598 CLIENT_DATA is an integer that is the index of the button in the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3599 tool bar. 0 is the first button.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3600
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3601 Returns FALSE to tell GTK to keep processing this event. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3602
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3603 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3604 xg_tool_bar_help_callback (w, event, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3605 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3606 GdkEventCrossing *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3607 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3608 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3609 /* The EMACS_INT cast avoids a warning. */
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3610 int idx = (int) (EMACS_INT) client_data;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3611 FRAME_PTR f = (FRAME_PTR) g_object_get_data (G_OBJECT (w), XG_FRAME_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3612 Lisp_Object help, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3613
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3614 if (! f || ! f->n_tool_bar_items || NILP (f->tool_bar_items))
50108
a9ff586d3d09 (xg_tool_bar_help_callback): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50106
diff changeset
3615 return FALSE;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3616
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3617 if (event->type == GDK_ENTER_NOTIFY)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3618 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3619 idx *= TOOL_BAR_ITEM_NSLOTS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3620 help = AREF (f->tool_bar_items, idx + TOOL_BAR_ITEM_HELP);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3621
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3622 if (NILP (help))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3623 help = AREF (f->tool_bar_items, idx + TOOL_BAR_ITEM_CAPTION);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3624 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3625 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3626 help = Qnil;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3627
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3628 XSETFRAME (frame, f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3629 kbd_buffer_store_help_event (frame, help);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3630
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3631 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3632 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3633
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3634
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3635 /* This callback is called when a tool bar item shall be redrawn.
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3636 It modifies the expose event so that the GtkImage widget redraws the
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3637 whole image. This to overcome a bug that makes GtkImage draw the image
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3638 in the wrong place when it tries to redraw just a part of the image.
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3639 W is the GtkImage to be redrawn.
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3640 EVENT is the expose event for W.
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3641 CLIENT_DATA is unused.
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3642
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3643 Returns FALSE to tell GTK to keep processing this event. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3644
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3645 static gboolean
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3646 xg_tool_bar_item_expose_callback (w, event, client_data)
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3647 GtkWidget *w;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3648 GdkEventExpose *event;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3649 gpointer client_data;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3650 {
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3651 gint width, height;
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3652
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3653 gdk_drawable_get_size (event->window, &width, &height);
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3654
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3655 event->area.x -= width > event->area.width ? width-event->area.width : 0;
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3656 event->area.y -= height > event->area.height ? height-event->area.height : 0;
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3657
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3658 event->area.x = max (0, event->area.x);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3659 event->area.y = max (0, event->area.y);
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
3660
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3661 event->area.width = max (width, event->area.width);
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3662 event->area.height = max (height, event->area.height);
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
3663
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3664 return FALSE;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3665 }
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3666
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3667 #define PROP(IDX) AREF (f->tool_bar_items, i * TOOL_BAR_ITEM_NSLOTS + (IDX))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3668
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3669
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3670 /* Create a tool bar for frame F. */
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3671
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3672 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3673 xg_create_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3674 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3675 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3676 struct x_output *x = f->output_data.x;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3677 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3678 int vbox_pos = x->menubar_widget ? 1 : 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3679
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3680 x->toolbar_widget = gtk_toolbar_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3681 x->handlebox_widget = gtk_handle_box_new ();
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3682 x->toolbar_detached = 0;
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3683
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3684 gtk_container_add (GTK_CONTAINER (x->handlebox_widget),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3685 x->toolbar_widget);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3686
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3687 gtk_box_pack_start (GTK_BOX (x->vbox_widget), x->handlebox_widget,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3688 FALSE, FALSE, 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3689
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3690 gtk_box_reorder_child (GTK_BOX (x->vbox_widget), x->handlebox_widget,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3691 vbox_pos);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3692
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3693 gtk_widget_set_name (x->toolbar_widget, "emacs-toolbar");
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3694
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3695 /* We only have icons, so override any user setting. We could
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3696 use the caption property of the toolbar item (see update_frame_tool_bar
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3697 below), but some of those strings are long, making the toolbar so
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3698 long it does not fit on the screen. The GtkToolbar widget makes every
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3699 item equal size, so the longest caption determine the size of every
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3700 tool bar item. I think the creators of the GtkToolbar widget
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3701 counted on 4 or 5 character long strings. */
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3702 gtk_toolbar_set_style (GTK_TOOLBAR (x->toolbar_widget), GTK_TOOLBAR_ICONS);
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3703 gtk_toolbar_set_orientation (GTK_TOOLBAR (x->toolbar_widget),
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3704 GTK_ORIENTATION_HORIZONTAL);
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3705
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3706 g_signal_connect (G_OBJECT (x->handlebox_widget), "child-detached",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3707 G_CALLBACK (xg_tool_bar_detach_callback), f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3708 g_signal_connect (G_OBJECT (x->handlebox_widget), "child-attached",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3709 G_CALLBACK (xg_tool_bar_attach_callback), f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3710
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3711 gtk_widget_show_all (x->handlebox_widget);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3712
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3713 gtk_widget_size_request (x->toolbar_widget, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3714 FRAME_TOOLBAR_HEIGHT (f) = req.height;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3715
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3716 /* The height has changed, resize outer widget and set columns
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3717 rows to what we had before adding the tool bar. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
3718 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3719
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3720 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3721 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3722
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3723 /* Find the right-to-left image named by RTL in the tool bar images for F.
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3724 Returns IMAGE if RTL is not found. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3725
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3726 static Lisp_Object
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3727 find_rtl_image (f, image, rtl)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3728 FRAME_PTR f;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3729 Lisp_Object image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3730 Lisp_Object rtl;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3731 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3732 int i;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3733 Lisp_Object file, rtl_name;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3734 struct gcpro gcpro1, gcpro2;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3735 GCPRO2 (file, rtl_name);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3736
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3737 rtl_name = Ffile_name_nondirectory (rtl);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3738
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3739 for (i = 0; i < f->n_tool_bar_items; ++i)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3740 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3741 Lisp_Object rtl_image = PROP (TOOL_BAR_ITEM_IMAGES);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3742 if (!NILP (file = file_for_image (rtl_image)))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3743 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3744 file = call1 (intern ("file-name-sans-extension"),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3745 Ffile_name_nondirectory (file));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3746 if (EQ (Fequal (file, rtl_name), Qt))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3747 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3748 image = rtl_image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3749 break;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3750 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3751 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3752 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3753
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3754 return image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3755 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3756
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3757 /* Update the tool bar for frame F. Add new buttons and remove old. */
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3758
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3759 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3760 update_frame_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3761 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3762 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3763 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3764 GtkRequisition old_req, new_req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3765 struct x_output *x = f->output_data.x;
75576
e852dba095f9 (update_frame_tool_bar): Initialize h/vmargin to 0.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75417
diff changeset
3766 int hmargin = 0, vmargin = 0;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3767 GtkToolbar *wtoolbar;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3768 GtkToolItem *ti;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3769 GtkTextDirection dir;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3770
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3771 if (! FRAME_GTK_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3772 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3773
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3774 BLOCK_INPUT;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3775
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3776 if (INTEGERP (Vtool_bar_button_margin)
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3777 && XINT (Vtool_bar_button_margin) > 0)
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3778 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3779 hmargin = XFASTINT (Vtool_bar_button_margin);
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3780 vmargin = XFASTINT (Vtool_bar_button_margin);
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3781 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3782 else if (CONSP (Vtool_bar_button_margin))
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3783 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3784 if (INTEGERP (XCAR (Vtool_bar_button_margin))
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3785 && XINT (XCAR (Vtool_bar_button_margin)) > 0)
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3786 hmargin = XFASTINT (XCAR (Vtool_bar_button_margin));
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3787
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3788 if (INTEGERP (XCDR (Vtool_bar_button_margin))
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3789 && XINT (XCDR (Vtool_bar_button_margin)) > 0)
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3790 vmargin = XFASTINT (XCDR (Vtool_bar_button_margin));
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3791 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3792
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3793 /* The natural size (i.e. when GTK uses 0 as margin) looks best,
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3794 so take DEFAULT_TOOL_BAR_BUTTON_MARGIN to mean "default for GTK",
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3795 i.e. zero. This means that margins less than
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3796 DEFAULT_TOOL_BAR_BUTTON_MARGIN has no effect. */
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3797 hmargin = max (0, hmargin - DEFAULT_TOOL_BAR_BUTTON_MARGIN);
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3798 vmargin = max (0, vmargin - DEFAULT_TOOL_BAR_BUTTON_MARGIN);
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
3799
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3800 if (! x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3801 xg_create_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3802
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3803 wtoolbar = GTK_TOOLBAR (x->toolbar_widget);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3804 gtk_widget_size_request (GTK_WIDGET (wtoolbar), &old_req);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3805 dir = gtk_widget_get_direction (x->toolbar_widget);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3806
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3807 for (i = 0; i < f->n_tool_bar_items; ++i)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3808 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3809
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3810 int enabled_p = !NILP (PROP (TOOL_BAR_ITEM_ENABLED_P));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3811 int selected_p = !NILP (PROP (TOOL_BAR_ITEM_SELECTED_P));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3812 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3813 int img_id;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3814 int icon_size = 0;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3815 struct image *img = NULL;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3816 Lisp_Object image;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3817 Lisp_Object stock;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3818 GtkStockItem stock_item;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3819 char *stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3820 char *icon_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3821 Lisp_Object rtl;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3822 GtkWidget *wbutton = NULL;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3823 GtkWidget *weventbox;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3824 Lisp_Object func = intern ("x-gtk-map-stock");
79460
1d493051aed3 (update_frame_tool_bar): Don't call x-gtk-map-stock if
Jan Djärv <jan.h.d@swipnet.se>
parents: 79340
diff changeset
3825 Lisp_Object specified_file;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3826
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3827 ti = gtk_toolbar_get_nth_item (GTK_TOOLBAR (x->toolbar_widget), i);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3828
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3829 if (ti)
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3830 {
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3831 weventbox = gtk_bin_get_child (GTK_BIN (ti));
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3832 wbutton = gtk_bin_get_child (GTK_BIN (weventbox));
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3833 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3834
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3835 image = PROP (TOOL_BAR_ITEM_IMAGES);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3836
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3837 /* Ignore invalid image specifications. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3838 if (!valid_image_p (image))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3839 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3840 if (wbutton) gtk_widget_hide (wbutton);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3841 continue;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3842 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3843
79460
1d493051aed3 (update_frame_tool_bar): Don't call x-gtk-map-stock if
Jan Djärv <jan.h.d@swipnet.se>
parents: 79340
diff changeset
3844 specified_file = file_for_image (image);
1d493051aed3 (update_frame_tool_bar): Don't call x-gtk-map-stock if
Jan Djärv <jan.h.d@swipnet.se>
parents: 79340
diff changeset
3845 if (!NILP (specified_file) && EQ (Qt, Ffboundp (func)))
1d493051aed3 (update_frame_tool_bar): Don't call x-gtk-map-stock if
Jan Djärv <jan.h.d@swipnet.se>
parents: 79340
diff changeset
3846 stock = call1 (func, specified_file);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3847
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3848 if (! NILP (stock) && STRINGP (stock))
49468
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3849 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3850 stock_name = SSDATA (stock);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3851 if (stock_name[0] == 'n' && stock_name[1] == ':')
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3852 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3853 GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (wtoolbar));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3854 GtkIconTheme *icon_theme = gtk_icon_theme_get_for_screen (screen);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3855
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3856 icon_name = stock_name + 2;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3857 stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3858 stock = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3859
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3860 if (! gtk_icon_theme_has_icon (icon_theme, icon_name))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3861 icon_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3862 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3863 icon_size = gtk_toolbar_get_icon_size (wtoolbar);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3864 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3865 else if (gtk_stock_lookup (SSDATA (stock), &stock_item))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3866 icon_size = gtk_toolbar_get_icon_size (wtoolbar);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3867 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3868 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3869 stock = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3870 stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3871 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3872 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3873
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3874 if (stock_name == NULL && icon_name == NULL)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3875 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3876 /* No stock image, or stock item not known. Try regular image. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3877
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3878 /* If image is a vector, choose the image according to the
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3879 button state. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3880 if (dir == GTK_TEXT_DIR_RTL
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3881 && !NILP (rtl = PROP (TOOL_BAR_ITEM_RTL_IMAGE))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3882 && STRINGP (rtl))
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3883 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3884 image = find_rtl_image (f, image, rtl);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3885 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3886
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3887 if (VECTORP (image))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3888 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3889 if (enabled_p)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3890 idx = (selected_p
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3891 ? TOOL_BAR_IMAGE_ENABLED_SELECTED
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3892 : TOOL_BAR_IMAGE_ENABLED_DESELECTED);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3893 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3894 idx = (selected_p
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3895 ? TOOL_BAR_IMAGE_DISABLED_SELECTED
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3896 : TOOL_BAR_IMAGE_DISABLED_DESELECTED);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3897
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3898 xassert (ASIZE (image) >= idx);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3899 image = AREF (image, idx);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3900 }
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3901 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3902 idx = -1;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3903
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3904 img_id = lookup_image (f, image);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3905 img = IMAGE_FROM_ID (f, img_id);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3906 prepare_image_for_display (f, img);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3907
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3908 if (img->load_failed_p || img->pixmap == None)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3909 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3910 if (ti)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3911 gtk_widget_hide_all (GTK_WIDGET (ti));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3912 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3913 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3914 /* Insert an empty (non-image) button */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3915 weventbox = gtk_event_box_new ();
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3916 wbutton = gtk_button_new ();
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3917 gtk_button_set_focus_on_click (GTK_BUTTON (wbutton), FALSE);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3918 gtk_button_set_relief (GTK_BUTTON (wbutton),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3919 GTK_RELIEF_NONE);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3920 gtk_container_add (GTK_CONTAINER (weventbox), wbutton);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3921 ti = gtk_tool_item_new ();
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3922 gtk_container_add (GTK_CONTAINER (ti), weventbox);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3923 gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), ti, -1);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3924 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3925 continue;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3926 }
49468
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3927 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3928
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3929 if (ti == NULL)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3930 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3931 GtkWidget *w;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3932 if (stock_name)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3933 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3934 w = gtk_image_new_from_stock (stock_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3935 g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3936 (gpointer) xstrdup (stock_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3937 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3938 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3939 else if (icon_name)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3940 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3941 w = gtk_image_new_from_icon_name (icon_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3942 g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_ICON_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3943 (gpointer) xstrdup (icon_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3944 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3945 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3946 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3947 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3948 w = xg_get_image_for_pixmap (f, img, x->widget, NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3949 /* Save the image so we can see if an update is needed when
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3950 this function is called again. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3951 g_object_set_data (G_OBJECT (w), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3952 (gpointer)img->pixmap);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3953 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3954
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3955 gtk_misc_set_padding (GTK_MISC (w), hmargin, vmargin);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3956 wbutton = gtk_button_new ();
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3957 gtk_button_set_focus_on_click (GTK_BUTTON (wbutton), FALSE);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3958 gtk_button_set_relief (GTK_BUTTON (wbutton), GTK_RELIEF_NONE);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3959 gtk_container_add (GTK_CONTAINER (wbutton), w);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3960 weventbox = gtk_event_box_new ();
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3961 gtk_container_add (GTK_CONTAINER (weventbox), wbutton);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3962 ti = gtk_tool_item_new ();
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3963 gtk_container_add (GTK_CONTAINER (ti), weventbox);
78538
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3964 gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), ti, -1);
74376
42ad3938ee1a (update_frame_tool_bar): Handle modifying a toolbar item
Jan Djärv <jan.h.d@swipnet.se>
parents: 73661
diff changeset
3965
42ad3938ee1a (update_frame_tool_bar): Handle modifying a toolbar item
Jan Djärv <jan.h.d@swipnet.se>
parents: 73661
diff changeset
3966
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3967 /* The EMACS_INT cast avoids a warning. */
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3968 g_signal_connect (G_OBJECT (ti), "create-menu-proxy",
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3969 GTK_SIGNAL_FUNC (xg_tool_bar_menu_proxy),
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3970 (gpointer) (EMACS_INT) i);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3971
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3972 g_signal_connect (G_OBJECT (wbutton), "clicked",
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3973 GTK_SIGNAL_FUNC (xg_tool_bar_callback),
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3974 (gpointer) (EMACS_INT) i);
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3975
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3976 gtk_widget_show_all (GTK_WIDGET (ti));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3977
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3978
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3979 g_object_set_data (G_OBJECT (weventbox), XG_FRAME_DATA, (gpointer)f);
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3980
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3981 /* Catch expose events to overcome an annoying redraw bug, see
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3982 comment for xg_tool_bar_item_expose_callback. */
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3983 g_signal_connect (G_OBJECT (ti),
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3984 "expose-event",
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3985 G_CALLBACK (xg_tool_bar_item_expose_callback),
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3986 0);
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3987
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3988 gtk_widget_set_sensitive (wbutton, enabled_p);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3989 gtk_tool_item_set_homogeneous (ti, FALSE);
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3990
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3991 /* Callback to save modifyer mask (Shift/Control, etc). GTK makes
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3992 no distinction based on modifiers in the activate callback,
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3993 so we have to do it ourselves. */
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3994 g_signal_connect (wbutton, "button-release-event",
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3995 GTK_SIGNAL_FUNC (xg_tool_bar_button_cb),
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3996 NULL);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3997
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3998 g_object_set_data (G_OBJECT (wbutton), XG_FRAME_DATA, (gpointer)f);
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3999
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4000 /* Use enter/leave notify to show help. We use the events
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4001 rather than the GtkButton specific signals "enter" and
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4002 "leave", so we can have only one callback. The event
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4003 will tell us what kind of event it is. */
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4004 /* The EMACS_INT cast avoids a warning. */
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4005 g_signal_connect (G_OBJECT (weventbox),
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4006 "enter-notify-event",
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4007 G_CALLBACK (xg_tool_bar_help_callback),
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4008 (gpointer) (EMACS_INT) i);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4009 g_signal_connect (G_OBJECT (weventbox),
68500
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4010 "leave-notify-event",
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4011 G_CALLBACK (xg_tool_bar_help_callback),
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
4012 (gpointer) (EMACS_INT) i);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4013 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4014 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4015 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4016 GtkWidget *wimage = gtk_bin_get_child (GTK_BIN (wbutton));
50059
ffb4a4dbe4c0 * gtkutil.c (update_frame_tool_bar): Compare pixmap ID instead of
Jan Djärv <jan.h.d@swipnet.se>
parents: 49826
diff changeset
4017 Pixmap old_img = (Pixmap)g_object_get_data (G_OBJECT (wimage),
ffb4a4dbe4c0 * gtkutil.c (update_frame_tool_bar): Compare pixmap ID instead of
Jan Djärv <jan.h.d@swipnet.se>
parents: 49826
diff changeset
4018 XG_TOOL_BAR_IMAGE_DATA);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4019 gpointer old_stock_name = g_object_get_data (G_OBJECT (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4020 XG_TOOL_BAR_STOCK_NAME);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4021 gpointer old_icon_name = g_object_get_data (G_OBJECT (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4022 XG_TOOL_BAR_ICON_NAME);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4023 if (stock_name &&
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4024 (! old_stock_name || strcmp (old_stock_name, stock_name) != 0))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4025 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4026 gtk_image_set_from_stock (GTK_IMAGE (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4027 stock_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4028 g_object_set_data_full (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4029 (gpointer) xstrdup (stock_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4030 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4031 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4032 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4033 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4034 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4035 else if (icon_name &&
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4036 (! old_icon_name || strcmp (old_icon_name, icon_name) != 0))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4037 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4038 gtk_image_set_from_icon_name (GTK_IMAGE (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4039 icon_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4040 g_object_set_data_full (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4041 (gpointer) xstrdup (icon_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4042 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4043 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4044 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4045 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4046 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4047 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4048 else if (img && old_img != img->pixmap)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4049 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4050 (void) xg_get_image_for_pixmap (f, img, x->widget, wimage);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4051 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4052 (gpointer)img->pixmap);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4053
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4054 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4055 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4056 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4057 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4058
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4059 gtk_misc_set_padding (GTK_MISC (wimage), hmargin, vmargin);
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4060
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4061 gtk_widget_set_sensitive (wbutton, enabled_p);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4062 gtk_widget_show_all (GTK_WIDGET (ti));
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4063 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4064
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4065 #undef PROP
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4066 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4067
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4068 /* Remove buttons not longer needed. We just hide them so they
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4069 can be reused later on. */
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4070 do
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4071 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4072 ti = gtk_toolbar_get_nth_item (GTK_TOOLBAR (x->toolbar_widget), i++);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4073 if (ti) gtk_widget_hide_all (GTK_WIDGET (ti));
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4074 } while (ti != NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4075
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4076 gtk_widget_size_request (GTK_WIDGET (wtoolbar), &new_req);
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
4077 if (old_req.height != new_req.height
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
4078 && ! FRAME_X_OUTPUT (f)->toolbar_detached)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4079 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4080 FRAME_TOOLBAR_HEIGHT (f) = new_req.height;
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
4081 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4082 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4083
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4084 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4085 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4086
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
4087 /* Deallocate all resources for the tool bar on frame F.
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
4088 Remove the tool bar. */
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
4089
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4090 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4091 free_frame_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4092 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4093 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4094 struct x_output *x = f->output_data.x;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4095
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4096 if (x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4097 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4098 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4099 gtk_container_remove (GTK_CONTAINER (x->vbox_widget),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4100 x->handlebox_widget);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4101 x->toolbar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4102 x->handlebox_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4103 FRAME_TOOLBAR_HEIGHT (f) = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4104
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4105 /* The height has changed, resize outer widget and set columns
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4106 rows to what we had before removing the tool bar. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
4107 xg_resize_outer_widget (f, FRAME_COLS (f), FRAME_LINES (f));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4108
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4109 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4110 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4111 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4112 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4113
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4114
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4115
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4116 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4117 Initializing
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4118 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4119 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4120 xg_initialize ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4121 {
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4122 GtkBindingSet *binding_set;
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4123
75417
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4124 #if HAVE_XFT
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4125 /* Work around a bug with corrupted data if libXft gets unloaded. This way
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4126 we keep it permanently linked in. */
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4127 XftInit (0);
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4128 #endif
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
4129
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
4130 gdpy_def = NULL;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4131 xg_ignore_gtk_scrollbar = 0;
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
4132 xg_detached_menus = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4133 xg_menu_cb_list.prev = xg_menu_cb_list.next =
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4134 xg_menu_item_cb_list.prev = xg_menu_item_cb_list.next = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4135
49419
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4136 id_to_widget.max_size = id_to_widget.used = 0;
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4137 id_to_widget.widgets = 0;
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4138
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4139 /* Remove F10 as a menu accelerator, it does not mix well with Emacs key
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4140 bindings. It doesn't seem to be any way to remove properties,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4141 so we set it to VoidSymbol which in X means "no key". */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4142 gtk_settings_set_string_property (gtk_settings_get_default (),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4143 "gtk-menu-bar-accel",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4144 "VoidSymbol",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4145 EMACS_CLASS);
49419
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4146
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4147 /* Make GTK text input widgets use Emacs style keybindings. This is
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4148 Emacs after all. */
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4149 gtk_settings_set_string_property (gtk_settings_get_default (),
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4150 "gtk-key-theme-name",
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4151 "Emacs",
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4152 EMACS_CLASS);
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4153
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4154 /* Make dialogs close on C-g. Since file dialog inherits from
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4155 dialog, this works for them also. */
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4156 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_DIALOG));
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4157 gtk_binding_entry_add_signal (binding_set, GDK_g, GDK_CONTROL_MASK,
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4158 "close", 0);
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4159
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4160 /* Make menus close on C-g. */
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4161 binding_set = gtk_binding_set_by_class (gtk_type_class (GTK_TYPE_MENU_SHELL));
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4162 gtk_binding_entry_add_signal (binding_set, GDK_g, GDK_CONTROL_MASK,
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4163 "cancel", 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4164 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4165
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4166 #endif /* USE_GTK */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4167
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4168 /* arch-tag: fe7104da-bc1e-4aba-9bd1-f349c528f7e3
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4169 (do not change this comment) */