annotate src/gtkutil.c @ 78690:4eb8619e3abd

(xg_tool_bar_expose_callback): Just do SET_FRAME_GARBAGED so no Lisp code is executed.
author Jan Djärv <jan.h.d@swipnet.se>
date Tue, 28 Aug 2007 10:05:38 +0000
parents 2fcf45c12927
children a888c5a82ba5
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.
75348
3d45362f1d38 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 75040
diff changeset
2 Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4 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
5
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
6 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
7 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: 77574
diff changeset
8 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
9 any later version.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
10
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
11 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
12 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
13 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
14 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
15
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
16 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
17 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
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 60553
diff changeset
19 Boston, MA 02110-1301, USA. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
20
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
21 #include "config.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
22
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
23 #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
24 #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
25 #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
26 #include <stdio.h>
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
27 #include "lisp.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
28 #include "xterm.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
29 #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
30 #include "syssignal.h"
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
31 #include "window.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
32 #include "atimer.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
33 #include "gtkutil.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
34 #include "termhooks.h"
51408
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
35 #include "keyboard.h"
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
36 #include "charset.h"
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
37 #include "coding.h"
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
38 #include <gdk/gdkkeysyms.h>
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
39
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
40
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
41 #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
42 (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
43
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
44 /* 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
45 #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
46
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
47
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 Display handling functions
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
50 ***********************************************************************/
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 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
53
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
54 /* 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
55
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
56 static GdkDisplay *
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
57 xg_get_gdk_display (dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
58 Display *dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
59 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
60 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
61 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
62
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
63 /* 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
64 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
65 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
66
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
67 static void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
68 xg_set_screen (w, f)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
69 GtkWidget *w;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
70 FRAME_PTR f;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
71 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
72 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
73 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
74 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
75 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
76
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
77 if (GTK_IS_MENU (w))
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
78 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
79 else
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
80 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
81 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
82 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
83
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 #else /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
86
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
87 /* 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
88 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
89
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
90 #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
91 #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
92 #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
93 #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
94 #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
95 #define GdkDisplay void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
96
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
97 #endif /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
98
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
99 /* 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
100 *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
101
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
102 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
103 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
104 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
105
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
106 int
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
107 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
108 char *display_name;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
109 Display **dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
110 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
111 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
112 GdkDisplay *gdpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
113
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
114 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
115 *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
116
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
117 return gdpy != NULL;
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 #else /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
120
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
121 return -1;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
122 #endif /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
123 }
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
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
126 /* 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
127
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
128 void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
129 xg_display_close (Display *dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
130 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
131 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
132 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
133
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
134 /* 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
135 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
136 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
137 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
138 struct x_display_info *dpyinfo;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
139 Display *new_dpy = 0;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
140 GdkDisplay *gdpy_new;
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 /* Find another display. */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
143 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
144 if (dpyinfo->display != dpy)
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 new_dpy = dpyinfo->display;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
147 break;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
148 }
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 if (! new_dpy) return; /* Emacs will exit anyway. */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
151
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
152 gdpy_new = gdk_x11_lookup_xdisplay (new_dpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
153 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
154 gdpy_new);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
155 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
156
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
157 /* 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
158 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
159 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
160
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
161 #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
162 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
163 #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
164 /* 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
165 gdk_display_close (gdpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
166 #endif
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
167 #endif /* HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
168 }
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
169
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
170
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
171 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
172 Utility functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
173 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
174 /* 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
175 NULL if no timer is started. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
176 static struct atimer *xg_timer;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
177
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
178
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
179 /* 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
180 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
181 static int malloc_cpt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
182
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
183 /* 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
184 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
185
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
186 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
187
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
188 widget_value *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
189 malloc_widget_value ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
190 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
191 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
192 if (widget_value_free_list)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
193 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
194 wv = widget_value_free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
195 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
196 wv->free_list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
197 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
198 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
199 {
69025
5d9232b72d14 (malloc_widget_value): Use xmalloc.
Richard M. Stallman <rms@gnu.org>
parents: 68922
diff changeset
200 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
201 malloc_cpt++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
202 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
203 memset (wv, 0, sizeof (widget_value));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
204 return wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
205 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
206
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
207 /* 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
208 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
209
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
210 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
211 free_widget_value (wv)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
212 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
213 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
214 if (wv->free_list)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
215 abort ();
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 if (malloc_cpt > 25)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
218 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
219 /* 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
220 We free it. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
221 free (wv);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
222 malloc_cpt--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
223 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
224 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
225 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
226 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
227 widget_value_free_list = wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
228 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
229 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
230
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
231
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
232 /* 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
233 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
234
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
235 GdkCursor *
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
236 xg_create_default_cursor (dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
237 Display *dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
238 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
239 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
240 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
241 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
242
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
243 /* 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
244
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
245 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
246 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
247 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
248 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
249 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
250 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
251 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
252 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
253 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
254 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
255
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
256 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
257 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
258 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
259 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
260 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
261
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 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
263 {
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 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
265 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
266 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
267 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
268 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
269 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
270 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
271 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
272 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
273 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
274
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 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
276 {
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 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
278 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
279
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 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
281 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
282
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 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
284 {
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 /* 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
286 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
287 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
288 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
289
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 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
291 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
292 }
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
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 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
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
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 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
299 }
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
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
301 /* 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
302 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
303 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
304 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
305 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
306 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
307 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
308 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
309 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
310 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
311
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
312 static GtkWidget *
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
313 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
314 FRAME_PTR f;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
315 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
316 GtkWidget *widget;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
317 GtkImage *old_widget;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
318 {
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
319 GdkPixmap *gpix;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
320 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
321 GdkDisplay *gdpy;
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
322
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
323 /* 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
324 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
325 look good in all cases. */
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
326 Lisp_Object specified_file = Qnil;
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
327 Lisp_Object tail;
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
328 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
329 extern Lisp_Object QCfile;
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
330
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
331 for (tail = XCDR (img->spec);
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
332 NILP (specified_file) && CONSP (tail) && CONSP (XCDR (tail));
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
333 tail = XCDR (XCDR (tail)))
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
334 if (EQ (XCAR (tail), QCfile))
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
335 specified_file = XCAR (XCDR (tail));
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
336
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
337 /* 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
338 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
339 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
340
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
341 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
342 && 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
343 {
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
344 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
345 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
346 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
347 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
348
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
349 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
350 }
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
351
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
352 /* 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
353 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
354 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
355
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
356 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
357 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
358 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
359
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
360 if (x_screen_planes (f) > 8 || x_screen_planes (f) == 1)
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
361 {
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
362 if (! old_widget)
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
363 old_widget = GTK_IMAGE (gtk_image_new_from_pixmap (gpix, gmask));
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
364 else
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
365 gtk_image_set_from_pixmap (old_widget, gpix, gmask);
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
366 }
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
367 else
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
368 {
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
369
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
370 /* This is a workaround to make icons look good on pseudo color
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
371 displays. Apparently GTK expects the images to have an alpha
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
372 channel. If they don't, insensitive and activated icons will
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
373 look bad. This workaround does not work on monochrome displays,
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
374 and is not needed on true color/static color displays (i.e.
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
375 16 bits and higher). */
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
376 GdkColormap *cmap = gtk_widget_get_colormap (widget);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
377 GdkPixbuf *icon_buf = xg_get_pixbuf_from_pix_and_mask (gpix, gmask, cmap);
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
378
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
379 if (! old_widget)
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
380 old_widget = GTK_IMAGE (gtk_image_new_from_pixbuf (icon_buf));
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
381 else
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
382 gtk_image_set_from_pixbuf (old_widget, icon_buf);
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
383
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
384 g_object_unref (G_OBJECT (icon_buf));
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
385 }
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
386
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
387 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
388 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
389
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
390 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
391 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
392
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
393
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
394 /* 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
395 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
396 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
397
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
398 static void
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
399 xg_set_cursor (w, cursor)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
400 GtkWidget *w;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
401 GdkCursor *cursor;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
402 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
403 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
404
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
405 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
406
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
407 /* 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
408 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
409 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
410 Ditto for menus. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
411
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
412 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
413 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
414 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
415
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
416 /* 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
417 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
418 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
419 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
420 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
421 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
422 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
423 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
424 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
425
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
426 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
427 xg_process_timeouts (timer)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
428 struct atimer *timer;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
429 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
430 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
431 /* 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
432 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
433 while (gtk_events_pending ())
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
434 gtk_main_iteration ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
435 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
436 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
437
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
438 /* 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
439 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
440 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
441
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
442 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
443 xg_start_timer ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
444 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
445 if (! xg_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 EMACS_TIME interval;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
448 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
449 xg_timer = start_atimer (ATIMER_CONTINUOUS,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
450 interval,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
451 xg_process_timeouts,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
452 0);
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
456 /* 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
457
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
458 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
459 xg_stop_timer ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
460 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
461 if (xg_timer)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
462 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
463 cancel_atimer (xg_timer);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
464 xg_timer = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
465 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
466 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
467
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
468 /* 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
469
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
470 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
471 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
472 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
473 xg_list_node *list_start = list->next;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
474
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
475 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
476 node->next = list_start;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
477 node->prev = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
478 list->next = node;
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
481 /* 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
482
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
483 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
484 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
485 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
486 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
487 if (node == list_start)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
488 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
489 list->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
490 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
491 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
492 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
493 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
494 node->prev->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
495 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
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
499 /* 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
500 utf8 or NULL, just return STR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
501 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
502 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
503
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
504 static char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
505 get_utf8_string (str)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
506 char *str;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
507 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
508 char *utf8_str = str;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
509
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
510 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
511
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
512 /* 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
513 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
514 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
515
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
516 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
517 {
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
518 /* 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
519 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
520 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
521 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
522 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
523 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
524 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
525
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
526 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
527 &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
528 && 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
529 {
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 ++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
531 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
532 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
533 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
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
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 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
537 {
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 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
539 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
540 }
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 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
542
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
543 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
544 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
545
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
546 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
547 &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
548 && 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
549 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
550 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
551 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
552 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
553 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
554 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
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
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 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
560 {
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
561 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
562 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
563 }
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 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
565 {
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 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
567 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
568 }
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 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
570 return utf8_str;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
571 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
572
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
573
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
574
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
575 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
576 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
577 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
578
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
579 /* 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
580 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
581 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
582 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
583
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
584 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
585 xg_set_geometry (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
586 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
587 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
588 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
589 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
590 int left = f->left_pos;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
591 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
592 int top = f->top_pos;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
593 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
594 char geom_str[32];
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
595
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
596 if (xneg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
597 left = -left;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
598 if (yneg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
599 top = -top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
600
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
601 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
602 FRAME_PIXEL_WIDTH (f),
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
603 FRAME_TOTAL_PIXEL_HEIGHT (f),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
604 (xneg ? '-' : '+'), left,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
605 (yneg ? '-' : '+'), top);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
606
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
607 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
608 geom_str))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
609 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
610 } 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
611 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
612 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
613 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
614 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
615
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
616
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
617 /* 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
618 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
619 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
620
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
621 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
622 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
623 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
624 int columns;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
625 int rows;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
626 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
627 /* 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
628 height now have changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
629 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
630 xg_set_geometry (f);
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 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
633 gdk_window_process_all_updates ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
634 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
635
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
636 /* 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
637 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
638 manually.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
639 F is the frame to resize.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
640 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
641
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
642 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
643 xg_resize_widgets (f, pixelwidth, pixelheight)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
644 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
645 int pixelwidth, pixelheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
646 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
647 int mbheight = FRAME_MENUBAR_HEIGHT (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
648 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
649 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
650 - mbheight - tbheight));
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
651 int columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixelwidth);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
652
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
653 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
654 && (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
655 || rows != FRAME_LINES (f)
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
656 || 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
657 || pixelheight != FRAME_PIXEL_HEIGHT (f)))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
658 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
659 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
660 GtkAllocation all;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
661
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
662 all.y = mbheight + tbheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
663 all.x = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
664
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
665 all.width = pixelwidth;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
666 all.height = pixelheight - mbheight - tbheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
667
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
668 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
669
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
670 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
671 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
672 cancel_mouse_face (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
673 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
674 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
677 /* 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
678
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
679 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
680 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
681 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
682 int cols;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
683 int rows;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
684 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
685 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
686 + 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
687 int pixelwidth;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
688
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
689 /* 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
690 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
691 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
692 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
693 windows. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
694 f->scroll_bar_actual_width
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
695 = 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
696
50099
a62497b91c74 Use generic compute_fringe_widths.
Kim F. Storm <storm@cua.dk>
parents: 50063
diff changeset
697 compute_fringe_widths (f, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
698
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
699 /* 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
700 after calculating that value. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
701 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
702
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
703 /* 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
704 but not rows/cols. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
705 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
706 pixelwidth, pixelheight);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
707 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
708 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
709 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
710 cancel_mouse_face (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
711 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
712
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
713 /* 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
714 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
715 X Window that aren't accessible.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
716
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
717 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
718
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
719 GtkWidget *
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
720 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
721 Display *dpy;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
722 Window wdesc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
723 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
724 gpointer gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
725 GtkWidget *gwdesc = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
726
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
727 BLOCK_INPUT;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
728
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
729 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
730 wdesc);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
731 if (gdkwin)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
732 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
733 GdkEvent event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
734 event.any.window = gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
735 gwdesc = gtk_get_event_widget (&event);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
736 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
737
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
738 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
739 return gwdesc;
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
742 /* 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
743 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
744
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
745 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
746 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
747 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
748 unsigned long pixel;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
749 GdkColor *c;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
750 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
751 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
752 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
753 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
754
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
755 /* 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
756 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
757
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
758 int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
759 xg_create_frame_widgets (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
760 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
761 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
762 GtkWidget *wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
763 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
764 GtkWidget *wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
765 GdkColor bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
766 GtkRcStyle *style;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
767 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
768 char *title = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
769
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
770 BLOCK_INPUT;
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 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
773 xg_set_screen (wtop, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
774
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
775 wvbox = gtk_vbox_new (FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
776 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
777
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
778 if (! wtop || ! wvbox || ! wfixed)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
779 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
780 if (wtop) gtk_widget_destroy (wtop);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
781 if (wvbox) gtk_widget_destroy (wvbox);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
782 if (wfixed) gtk_widget_destroy (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
783
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
784 UNBLOCK_INPUT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
785 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
786 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
787
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
788 /* 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
789 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
790 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
791 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
792
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
793 /* 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
794 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
795 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
796
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
797 if (title) gtk_window_set_title (GTK_WINDOW (wtop), title);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
798
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
799 FRAME_GTK_OUTER_WIDGET (f) = wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
800 FRAME_GTK_WIDGET (f) = wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
801 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
802
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
803 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
804
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
805 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
806 FRAME_PIXEL_HEIGHT (f));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
807
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
808 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
809 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
810
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
811 if (FRAME_EXTERNAL_TOOL_BAR (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
812 update_frame_tool_bar (f);
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 /* 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
815 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
816 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
817 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
818 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
819 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
820 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
821 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
822 FRAME_TOOLBAR_HEIGHT (f) = 38;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
823
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
824
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
825 /* 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
826 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
827 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
828 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
829 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
830 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
831
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
832 /* 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
833 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
834 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
835 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
836 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
837 SSDATA (Vx_resource_class));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
838
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
839 /* 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
840 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
841 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
842 G_CALLBACK (gtk_true), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
843
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
844 /* 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
845 and specify it.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
846 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
847 xg_set_geometry (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
848
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
849 gtk_widget_add_events (wfixed,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
850 GDK_POINTER_MOTION_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
851 | GDK_EXPOSURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
852 | GDK_BUTTON_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
853 | GDK_BUTTON_RELEASE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
854 | GDK_KEY_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
855 | GDK_ENTER_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
856 | GDK_LEAVE_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
857 | GDK_FOCUS_CHANGE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
858 | GDK_STRUCTURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
859 | GDK_VISIBILITY_NOTIFY_MASK);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
860
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
861 /* 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
862 by callers of this function. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
863 gtk_widget_realize (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
864 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
865
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
866 /* 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
867 we must keep X and GTK background in sync. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
868 xg_pix_to_gcolor (wfixed, f->output_data.x->background_pixel, &bg);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
869 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
870
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
871 /* 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
872 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
873 of background color. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
874 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
875
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
876 /* 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
877 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
878 gtk_widget_modify_style (wfixed, style);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
879
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
880 /* 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
881 f->border_width = 0;
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
882 f->internal_border_width = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
883
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
884 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
885
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
886 return 1;
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
889 /* 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
890 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
891 that the window now has.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
892 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
893 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
894
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
895 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
896 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
897 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
898 long flags;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
899 int user_position;
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 if (FRAME_GTK_OUTER_WIDGET (f))
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 /* 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
904 to its own defaults. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
905 GdkGeometry size_hints;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
906 gint hint_flags = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
907 int base_width, base_height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
908 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
909 int win_gravity = f->win_gravity;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
910
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
911 if (flags)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
912 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
913 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
914 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
915 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
916 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
917 else
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
918 flags = f->size_hint_flags;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
919
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
920 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
921 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
922
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
923 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
924 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
925 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
926
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
927 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
928 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
929 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
930 + 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
931
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
932 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
933
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
934 size_hints.base_width = base_width;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
935 size_hints.base_height = base_height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
936 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
937 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
938
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
939
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
940 /* 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
941 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
942 hint_flags |= GDK_HINT_WIN_GRAVITY;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
943 size_hints.win_gravity = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
944 if (win_gravity == NorthWestGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
945 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
946 else if (win_gravity == NorthGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
947 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
948 else if (win_gravity == NorthEastGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
949 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
950 else if (win_gravity == WestGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
951 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
952 else if (win_gravity == CenterGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
953 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
954 else if (win_gravity == EastGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
955 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
956 else if (win_gravity == SouthWestGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
957 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
958 else if (win_gravity == SouthGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
959 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
960 else if (win_gravity == SouthEastGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
961 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
962 else if (win_gravity == StaticGravity)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
963 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
964
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
965 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
966 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
967 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
968
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
969 if (user_position)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
970 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
971 hint_flags &= ~GDK_HINT_POS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
972 hint_flags |= GDK_HINT_USER_POS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
973 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
974
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
975 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
976
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
977 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
978 FRAME_GTK_OUTER_WIDGET (f),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
979 &size_hints,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
980 hint_flags);
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 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
983 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
984 UNBLOCK_INPUT;
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 }
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 /* Change background color of a frame.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
989 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
990 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
991 F is the frame to change,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
992 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
993
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
994 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
995 xg_set_background_color (f, bg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
996 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
997 unsigned long bg;
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 if (FRAME_GTK_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1000 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1001 GdkColor gdk_bg;
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 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1004 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
1005 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
1006 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1007 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1008 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1009
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1010
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1011 /* 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
1012 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
1013
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1014 void
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1015 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
1016 FRAME_PTR f;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1017 Pixmap icon_pixmap;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1018 Pixmap icon_mask;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1019 {
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1020 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
1021 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
1022 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
1023 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
1024
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1025 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
1026 }
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1027
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1028
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1029
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1030 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1031 Dialog functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1032 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1033 /* 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
1034 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
1035
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1036 static char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1037 get_dialog_title (char key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1038 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1039 char *title = "";
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1040
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1041 switch (key) {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1042 case 'E': case 'e':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1043 title = "Error";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1044 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1045
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1046 case 'I': case 'i':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1047 title = "Information";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1048 break;
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 case 'L': case 'l':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1051 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1052 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1053
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1054 case 'P': case 'p':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1055 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1056 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1057
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1058 case 'Q': case 'q':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1059 title = "Question";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1060 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1061 }
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 return title;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1064 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1065
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1066 /* 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
1067 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
1068 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
1069 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
1070 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
1071 W is the dialog widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1072 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
1073 user_data is NULL (not used).
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 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
1076
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1077 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1078 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
1079 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1080 GdkEvent *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1081 gpointer user_data;
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 gtk_widget_unmap (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1084 return TRUE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1085 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1086
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1087 /* 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
1088 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
1089 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
1090 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
1091
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1092 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
1093
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1094 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1095 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
1096 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1097 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1098 GCallback deactivate_cb;
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 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
1101 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
1102 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
1103 int left_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1104 int button_nr = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1105 int button_spacing = 10;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1106 GtkWidget *wdialog = gtk_dialog_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1107 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1108 GtkBox *cur_box;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1109 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1110 GtkWidget *whbox_up;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1111 GtkWidget *whbox_down;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1112
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1113 /* 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
1114 instead. This looks better. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1115 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
1116
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1117 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
1118 left_buttons = total_buttons - right_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1119
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1120 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
1121 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
1122
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1123 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
1124
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1125 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1126 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1127 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
1128 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
1129 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
1130
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1131 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
1132 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
1133 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
1134
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1135 cur_box = GTK_BOX (whbox_up);
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1138 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
1139 G_CALLBACK (dialog_delete_callback), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1140
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1141 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1142 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1143 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
1144 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
1145 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1146
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1147 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
1148 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1149 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
1150 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1151 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1152
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
1153 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
1154 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1155 /* 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
1156 w = gtk_label_new (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1157 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
1158 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1159 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1160 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
1161 TRUE, TRUE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1162 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
1163
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1164 /* 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
1165 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
1166 gtk_widget_realize (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1167 gtk_widget_size_request (w, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1168 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
1169 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
1170 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
1171 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
1172 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1173 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1174 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1175 /* 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
1176 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
1177 if (! item->enabled)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1178 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1179 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1180 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
1181 select_cb, item->call_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1182
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1183 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
1184 if (++button_nr == left_buttons)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1185 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1186 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1187 cur_box = GTK_BOX (whbox_down);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1188 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1189 gtk_box_pack_start (cur_box,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1190 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1191 TRUE, TRUE,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1192 button_spacing);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1193 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1194 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1195
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1196 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
1197 g_free (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1198 }
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 return wdialog;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1201 }
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
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
1204
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1205 /***********************************************************************
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1206 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
1207 ***********************************************************************/
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1208 /* 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
1209 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
1210
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1211 int
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1212 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
1213 {
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1214 #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
1215 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
1216 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
1217 #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
1218
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1219 #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
1220 return 1;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1221 #else
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1222 return 0;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1223 #endif
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1224
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1225 #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
1226 }
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
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1229 /* 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
1230 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
1231 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
1232
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1233 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
1234 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
1235 response,
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1236 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
1237 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
1238 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
1239 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
1240 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1241 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
1242 *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
1243 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1244
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1245
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1246 /* 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
1247
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1248 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
1249 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
1250 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
1251 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1252 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
1253 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
1254 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
1255 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
1256 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
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
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1259 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
1260
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1261 #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
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 /* 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
1264 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
1265
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1266 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
1267 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
1268 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
1269 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1270 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
1271 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1272
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1273 /* 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
1274 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
1275
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1276 static void
67849
e30591b77191 Formatting
Jan Djärv <jan.h.d@swipnet.se>
parents: 67843
diff changeset
1277 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
1278 GtkWidget *widget;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1279 gpointer data;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1280 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1281 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
1282 gboolean visible;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1283 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
1284 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
1285 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1286
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1287
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1288 /* 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
1289 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
1290 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
1291 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
1292 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
1293
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1294 static void
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1295 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
1296 GObject *gobject;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1297 GParamSpec *arg1;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1298 gpointer user_data;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1299 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1300 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
1301
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1302 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
1303 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1304 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
1305 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
1306 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
1307
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1308 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
1309 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
1310
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1311 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
1312 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1313 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
1314 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
1315 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1316 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
1317 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
1318 (G_OBJECT (wtoggle),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1319 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
1320 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1321 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1322 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
1323 }
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1324 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1325
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
1326 /* 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
1327 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
1328 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
1329 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
1330 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
1331 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
1332 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
1333
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1334 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
1335
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1336 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
1337 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
1338 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
1339 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
1340 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
1341 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
1342 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
1343 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
1344 {
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1345 char message[1024];
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1346
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1347 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
1348 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
1349 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
1350 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
1351 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
1352 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
1353 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
1354
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
1355
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 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
1357 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
1358
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 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
1360 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
1361 (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
1362 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
1363 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
1364 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
1365 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
1366
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1367 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
1368 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
1369 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
1370
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1371 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
1372 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1373 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
1374 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
1375 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1376 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
1377 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
1378 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
1379 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
1380 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
1381
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
1382 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
1383 {
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1384 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
1385 /* 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
1386 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
1387 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
1388 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
1389 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
1390 "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
1391 "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
1392
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1393 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
1394 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
1395 }
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1396
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1397 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
1398 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
1399 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
1400 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
1401
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
1402 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
1403 {
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1404 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
1405 struct gcpro gcpro1;
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1406 GCPRO1 (file);
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
1407 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
1408
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
1409 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
1410
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
1411 /* 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
1412 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
1413 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
1414 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
1415
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1416 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
1417 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
1418 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
1419 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
1420 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
1421 {
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1422 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
1423 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
1424 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
1425 {
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
1426 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
1427 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
1428 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
1429 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
1430 }
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
1431 }
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
1432
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1433 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
1434 }
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
1435
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1436 *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
1437 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
1438 }
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1439 #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
1440
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1441 #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
1442
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1443 /* 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
1444 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
1445
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1446 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
1447 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
1448 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1449 {
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1450 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
1451 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
1452 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1453
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1454 /* Create a file selection dialog.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1455 F is the current frame.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1456 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
1457 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
1458 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
1459 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
1460 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
1461
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1462 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
1463
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1464 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
1465 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
1466 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
1467 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1468 char *prompt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1469 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
1470 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
1471 xg_get_file_func *func;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1472 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1473 GtkWidget *filewin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1474 GtkFileSelection *filesel;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1475
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1476 filewin = gtk_file_selection_new (prompt);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1477 filesel = GTK_FILE_SELECTION (filewin);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1478
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1479 if (default_filename)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1480 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
1481
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1482 if (mustmatch_p)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1483 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1484 /* 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
1485 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
1486 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
1487 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1488
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1489 *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
1490
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1491 return filewin;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1492 }
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
1493 #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
1494
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1495 /* 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
1496 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
1497 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
1498 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
1499 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
1500 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
1501 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
1502 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
1503 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
1504
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1505 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
1506 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
1507
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1508 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
1509 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
1510 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
1511 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
1512 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
1513 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
1514 {
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1515 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
1516 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
1517 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
1518 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
1519 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
1520
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1521 #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
1522 /* 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
1523 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
1524 threads. */
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1525 sigblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1526 #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
1527
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
1528 #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
1529
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1530 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
1531 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
1532 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
1533 else
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1534 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
1535 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
1536
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1537 #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
1538
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1539 #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
1540 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
1541 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
1542 #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
1543 #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
1544 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
1545 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
1546 #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
1547
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1548 #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
1549
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1550 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
1551 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
1552 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
1553 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
1554 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
1555 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
1556
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1557 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
1558 "response",
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1559 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
1560 &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
1561
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1562 /* 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
1563 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
1564
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1565 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
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 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
1568 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
1569 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1570 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
1571 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
1572 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1573
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1574 #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
1575 sigunblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1576 #endif
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1577
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1578 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
1579 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
1580
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1581 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
1582
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1583 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
1584 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1585
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1586
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1587 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1588 Menu functions.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1589 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1590
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1591 /* 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
1592 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
1593 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
1594
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1595 #define MENU_ITEM_NAME "emacs-menuitem"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1596
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1597
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1598 /* 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
1599 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
1600 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
1601
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1602 /* 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
1603 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
1604 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
1605
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1606 /* 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
1607 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
1608 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
1609
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1610 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
1611 share the same structure, hence the reference count.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1612
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1613 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
1614 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
1615
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1616 static xg_menu_cb_data *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1617 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
1618 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1619 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1620 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1621 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1622 if (! cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1623 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1624 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
1625 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1626 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
1627 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
1628 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1629 cl_data->ref_count = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1630
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1631 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
1632 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1633
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1634 cl_data->ref_count++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1635
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1636 return cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1637 }
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 /* 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
1640 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
1641
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1642 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
1643 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
1644 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
1645 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
1646 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
1647 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
1648 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
1649
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1650 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1651 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
1652 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1653 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1654 GCallback highlight_cb;
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 if (cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1657 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1658 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1659 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
1660 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
1661 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1662 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1663 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1664
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1665 /* Decrease reference count for CL_DATA.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1666 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
1667
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1668 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1669 unref_cl_data (cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1670 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1671 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1672 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
1673 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1674 cl_data->ref_count--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1675 if (cl_data->ref_count == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1676 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1677 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
1678 xfree (cl_data);
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1683 /* 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
1684
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1685 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1686 xg_mark_data ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1687 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1688 xg_list_node *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1689
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1690 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
1691 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
1692
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1693 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
1694 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1695 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
1696
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1697 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
1698 mark_object (cb_data->help);
49323
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 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1701
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1702
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1703 /* 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
1704 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
1705 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
1706
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1707 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1708 menuitem_destroy_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1709 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1710 gpointer client_data;
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 if (client_data)
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 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
1715 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
1716 xfree (data);
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 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
1721 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
1722 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
1723 CLIENT_DATA is not used.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1724
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1725 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
1726
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1727 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1728 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
1729 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1730 GdkEventCrossing *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1731 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1732 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1733 GdkEvent ev;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1734 GtkWidget *subwidget;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1735 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
1736
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1737 ev.crossing = *event;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1738 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
1739 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
1740 XG_ITEM_DATA);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1741 if (data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1742 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1743 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
1744 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1745 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
1746 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
1747 (*func) (subwidget, call_data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1748 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1749 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1750
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1751 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1752 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1753
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1754 /* 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
1755 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
1756 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
1757
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1758 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1759 menu_destroy_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1760 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1761 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1762 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1763 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
1764 }
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 /* 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
1767 menu has been activated or deactivated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1768 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
1769 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
1770 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
1771 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
1772 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
1773
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1774 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1775 menu_grab_callback (GtkWidget *widget,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1776 gboolean ungrab_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1777 gpointer client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1778 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1779 /* Keep track of total number of grabs. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1780 static int cnt;
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 if (ungrab_p) cnt--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1783 else cnt++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1784
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1785 if (cnt > 0 && ! xg_timer) xg_start_timer ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1786 else if (cnt == 0 && xg_timer) xg_stop_timer ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1787 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1788
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1789 /* 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
1790 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
1791
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1792 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
1793
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1794 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1795 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
1796 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1797 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1798 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1799 GtkWidget *wlbl;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1800 GtkWidget *wkey;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1801 GtkWidget *wbox;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1802
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1803 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
1804 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
1805 wkey = gtk_label_new (utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1806
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1807 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
1808 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
1809
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1810 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
1811 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
1812
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1813 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
1814 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
1815 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
1816
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1817 return wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1818 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1819
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1820 /* 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
1821 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
1822 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
1823 ITEM is the widget_value describing the menu item.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1824
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1825 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
1826 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
1827 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
1828 *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
1829 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
1830
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1831 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
1832 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
1833
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1834 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1835 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
1836 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1837 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1838 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1839 GSList **group;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1840 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1841 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1842 GtkWidget *wtoadd = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1843
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
1844 /* 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
1845 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
1846 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
1847 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
1848 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
1849
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1850 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1851 wtoadd = make_widget_for_menu_item (utf8_label, utf8_key);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1852
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1853 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
1854 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1855 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1856 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
1857 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
1858 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
1859 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1860 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
1861 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1862 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
1863 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
1864 *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
1865 if (item->selected)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1866 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
1867 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1868 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1869 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1870 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1871 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
1872 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
1873 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1874
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1875 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
1876 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
1877
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1878 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1879 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1880
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
1881 /* 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
1882 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
1883
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1884 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
1885 xg_separator_p (char *label)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1886 {
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
1887 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
1888 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
1889 && 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
1890 && 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
1891 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1892 static char* separator_names[] = {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1893 "space",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1894 "no-line",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1895 "single-line",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1896 "double-line",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1897 "single-dashed-line",
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 "double-dashed-line",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1899 "shadow-etched-in",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1900 "shadow-etched-out",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1901 "shadow-etched-in-dash",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1902 "shadow-etched-out-dash",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1903 "shadow-double-etched-in",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1904 "shadow-double-etched-out",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1905 "shadow-double-etched-in-dash",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1906 "shadow-double-etched-out-dash",
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1907 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
1908 };
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1909
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1910 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
1911
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1912 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
1913 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
1914 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
1915 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
1916 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1917 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
1918 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
1919 /* 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
1920 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
1921 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
1922 ++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
1923 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
1924 }
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
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 return 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1927 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1928
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1929 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
1930
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1931 /* 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
1932
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1933 int
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1934 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
1935 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1936 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
1937 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1938
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1939 /* 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
1940 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
1941 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
1942 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
1943
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1944 static void
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1945 tearoff_remove (widget, client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1946 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1947 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1948 {
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1949 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
1950 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1951
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1952 /* 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
1953 xg_detached_menus count.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1954 WIDGET is the GtkTearoffMenuItem.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1955 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
1956
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1957 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1958 tearoff_activate (widget, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1959 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1960 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1961 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1962 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
1963 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
1964 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1965 ++xg_detached_menus;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1966 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
1967 "destroy",
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
1968 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
1969 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1970 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1971
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1972
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1973 /* 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
1974 ITEM decribes the menu item.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1975 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
1976 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
1977 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
1978 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
1979 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
1980 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
1981 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
1982 *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
1983 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
1984
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1985 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
1986
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1987 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1988 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
1989 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1990 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1991 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1992 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1993 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1994 GSList **group;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1995 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1996 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1997 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1998 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1999 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
2000
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2001 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
2002 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
2003
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2004 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
2005
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2006 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
2007 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
2008
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2009 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
2010
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2011 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
2012
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2013 cb_data->select_id = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2014 cb_data->help = item->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2015 cb_data->cl_data = cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2016 cb_data->call_data = item->call_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2017
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2018 g_signal_connect (G_OBJECT (w),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2019 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2020 G_CALLBACK (menuitem_destroy_callback),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2021 cb_data);
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 /* 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
2024 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
2025
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2026 /* final item, not a submenu */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2027 if (item->call_data && ! item->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2028 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2029 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2030 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2031 = 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
2032 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2033
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2034 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2035 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2036
71132
162d493b1e5c * gtkutil.c (menu_nav_ended): Change x-menu-bar-start to menu-bar-open.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71056
diff changeset
2037 /* Callback called when keyboard traversal (started by 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
2038 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
2039 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
2040 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
2041
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2042 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
2043 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
2044 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
2045 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
2046 {
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2047 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
2048
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
2049 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
2050 {
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2051 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
2052 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
2053
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
2054 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
2055 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
2056 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
2057
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
2058 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
2059 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
2060 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
2061 }
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2062 }
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
50112
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2065 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
2066 GCallback, GCallback, int, int, int,
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2067 GtkWidget *, xg_menu_cb_data *, char *));
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2068
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2069 /* 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
2070 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
2071 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
2072 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
2073 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
2074 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
2075 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
2076 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
2077 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
2078 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
2079 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
2080 (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
2081 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
2082 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
2083 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
2084 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
2085
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2086 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
2087 not NULL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2088
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2089 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
2090
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2091 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2092 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
2093 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
2094 widget_value *data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2095 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2096 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2097 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2098 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2099 int pop_up_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2100 int menu_bar_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2101 int add_tearoff_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2102 GtkWidget *topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2103 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2104 char *name;
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 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2107 GtkWidget *wmenu = topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2108 GSList *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2109
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2110 if (! topmenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2111 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2112 if (! menu_bar_p)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2113 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2114 wmenu = gtk_menu_new ();
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2115 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
2116 /* 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
2117 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
2118 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
2119 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
2120 "enter-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2121 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
2122 NULL);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2123 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
2124 "leave-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2125 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
2126 NULL);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2127 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2128 else wmenu = gtk_menu_bar_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2129
71056
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2130 /* 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
2131 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
2132 "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
2133 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
2134 f);
3e5c40f72a04 Connect menu_nav_ended to "selection-done" to fix grabs
Jan Djärv <jan.h.d@swipnet.se>
parents: 69141
diff changeset
2135
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2136 /* 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
2137 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
2138 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
2139 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
2140 G_CALLBACK (menu_destroy_callback), cl_data);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2141
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2142 if (name)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2143 gtk_widget_set_name (wmenu, name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2144
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2145 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2146 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
2147 "selection-done", deactivate_cb, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2148
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2149 g_signal_connect (G_OBJECT (wmenu),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2150 "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
2151 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2152
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2153 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
2154 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2155 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
2156 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
2157
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2158 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
2159 G_CALLBACK (tearoff_activate), 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2160 }
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 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
2163 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2164 GtkWidget *w;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2165
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2166 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
2167 && !xg_separator_p (item->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2168 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2169 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2170 /* 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
2171 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
2172 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2173 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
2174
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2175 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
2176 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
2177 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2178 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
2179 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2180 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
2181 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2182 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2183 /* GTK only have one separator type. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2184 w = gtk_separator_menu_item_new ();
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 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2187 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2188 w = xg_create_one_menuitem (item,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2189 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2190 item->contents ? 0 : select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2191 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2192 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2193 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2194
77574
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2195 /* Create a possibly empty submenu for menu bar items, since some
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2196 themes don't highlight items correctly without it. */
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2197 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
2198 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2199 GtkWidget *submenu = create_menus (item->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2200 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2201 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2202 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2203 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2204 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2205 0,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2206 add_tearoff_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2207 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2208 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2209 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2210 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
2211 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2212 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2213
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2214 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
2215 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
2216 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2217
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2218 return wmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2219 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2220
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2221 /* 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
2222 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
2223 with some text and buttons.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2224 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
2225 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
2226 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
2227 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
2228 a dialog button is pressed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2229 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
2230 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
2231 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
2232 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
2233
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2234 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
2235
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2236 GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2237 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
2238 select_cb, deactivate_cb, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2239 char *type;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2240 char *name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2241 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2242 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2243 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2244 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2245 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2246 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2247 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
2248 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
2249 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
2250
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2251 if (strcmp (type, "dialog") == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2252 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2253 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
2254 xg_set_screen (w, f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2255 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
2256 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
2257 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
2258 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
2259 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
2260 }
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2261 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
2262 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2263 w = create_menus (val->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2264 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2265 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2266 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2267 highlight_cb,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2268 pop_up_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2269 menu_bar_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2270 menu_bar_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2271 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2272 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2273 name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2274
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2275 /* 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
2276 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
2277 if (pop_up_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2278 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2279 /* 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
2280 gtk_widget_realize (w);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2281 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
2282 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2283 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2284 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2285 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2286 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
2287 type);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2288 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2289
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2290 return w;
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
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
2293 /* 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
2294
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2295 static const char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2296 xg_get_menu_item_label (witem)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2297 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2298 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2299 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
2300 return gtk_label_get_label (wlabel);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2301 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2302
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
2303 /* 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
2304
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2305 static int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2306 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
2307 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2308 char *label;
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 int is_same = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2311 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
2312 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
2313
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2314 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
2315 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
2316 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
2317 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
2318
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2319 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
2320
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2321 return is_same;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2322 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2323
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2324 /* 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
2325
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2326 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
2327 xg_destroy_widgets (list)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2328 GList *list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2329 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2330 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2331
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2332 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
2333 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2334 GtkWidget *w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2335
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2336 /* 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
2337 gtk_widget_destroy (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2338 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2341 /* 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
2342 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
2343 *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
2344 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
2345 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
2346 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
2347 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
2348 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
2349 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
2350
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2351 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
2352
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2353 static void
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2354 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
2355 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
2356 GtkWidget *menubar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2357 FRAME_PTR f;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2358 GList **list;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2359 GList *iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2360 int pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2361 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2362 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2363 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2364 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2365 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2366 if (! iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2367 return;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2368 else if (iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2369 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2370 /* 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
2371 xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2372
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2373 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2374 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2375 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2376 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2377 else if (! iter && val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2378 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2379 /* 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
2380 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
2381 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
2382
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2383 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2384 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2385 iter = 0;
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 /* Below this neither iter or val is NULL */
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2388 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
2389 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2390 /* 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
2391 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2392 iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2393 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2394 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2395 else /* This item is changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2396 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2397 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
2398 GtkMenuItem *witem2 = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2399 int val_in_menubar = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2400 int iter_in_new_menubar = 0;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2401 GList *iter2;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2402 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2403
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2404 /* 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
2405 for (iter2 = iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2406 iter2 && ! val_in_menubar;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2407 iter2 = g_list_next (iter2))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2408 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2409 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
2410 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
2411 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2412
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2413 /* 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
2414 specification for the new menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2415 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
2416 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
2417
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2418 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
2419 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2420 int nr = pos;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2421
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2422 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2423 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2424 New: A C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2425 Remove B. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2426
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2427 gtk_widget_ref (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2428 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
2429 gtk_widget_destroy (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2430
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2431 /* 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
2432 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2433 *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
2434 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
2435 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2436 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
2437 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2438 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2439 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2440 New: A X C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2441 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
2442 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
2443 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
2444 (corresponds to B above).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2445 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
2446 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
2447 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
2448 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
2449 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
2450 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
2451 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
2452 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
2453 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
2454 GtkWidget *submenu = gtk_menu_item_get_submenu (witem);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2455
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
2456 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
2457
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2458 /* 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
2459 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
2460 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
2461 /* 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
2462 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
2463
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2464 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2465 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2466 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2467 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2468 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
2469 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2470 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2471 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2472 New: A X B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2473 Insert X. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2474
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2475 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2476 GList *group = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2477 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
2478 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2479 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2480 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2481 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2482 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2483
77574
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2484 /* Create a possibly empty submenu for menu bar items, since some
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2485 themes don't highlight items correctly without it. */
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2486 GtkWidget *submenu = create_menus (NULL, f,
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2487 select_cb, NULL, highlight_cb,
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2488 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
2489 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
2490 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), w, pos);
77574
b3ee2b840a3b (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2491 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
2492
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2493 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2494 *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
2495 while (nr-- > 0) iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2496 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2497 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2498 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2499 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2500 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
2501 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2502 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2503 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2504 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2505 New: A C B
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2506 Move C before B */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2507
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2508 gtk_widget_ref (GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2509 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
2510 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
2511 GTK_WIDGET (witem2), pos);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2512 gtk_widget_unref (GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2513
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2514 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2515 *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
2516 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
2517 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
2518 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2519 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2520 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2521 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2522
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2523 /* Update the rest of the menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2524 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
2525 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
2526 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2527
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2528 /* 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
2529 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
2530 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
2531 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
2532
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2533 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2534 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
2535 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2536 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2537 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2538 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2539 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2540 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2541 GtkWidget *wchild;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2542 GtkLabel *wlbl = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2543 GtkLabel *wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2544 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2545 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
2546 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
2547 const char *old_key = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2548 xg_menu_item_cb_data *cb_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2549
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2550 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
2551 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
2552 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
2553
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2554 /* 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
2555 if (GTK_IS_HBOX (wchild))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2556 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2557 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
2558
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2559 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2560 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2561 g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2562
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2563 if (! utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2564 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2565 /* 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
2566 gtk_widget_ref (GTK_WIDGET (wlbl));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2567 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
2568 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
2569 wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2570 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2571
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2572 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2573 else /* Just a label. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2574 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2575 wlbl = GTK_LABEL (wchild);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2576
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2577 /* 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
2578 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2579 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2580 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
2581 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
2582
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2583 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2584 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2585 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2586
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2587 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
2588 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
2589 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2590 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2591
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2592
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
2593 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
2594 if (wlbl) old_label = gtk_label_get_label (wlbl);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2595
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
2596 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
2597 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
2598
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
2599 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
2600 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
2601
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
2602 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
2603 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
2604
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2605 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
2606 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2607 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
2608 gtk_widget_set_sensitive (w, TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2609
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2610 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
2611 XG_ITEM_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2612 if (cb_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2613 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2614 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
2615 cb_data->help = val->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2616 cb_data->cl_data = cl_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2617
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2618 /* 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
2619 if (val->call_data && ! val->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2620 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2621 /* 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
2622 if (! cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2623 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2624 = 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
2625 select_cb, cb_data);
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 else if (cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2628 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2629 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
2630 cb_data->select_id = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2631 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2632 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2633 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2634
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2635 /* 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
2636
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2637 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2638 xg_update_toggle_item (val, w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2639 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2640 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2641 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2642 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
2643 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2644
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2645 /* 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
2646
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2647 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2648 xg_update_radio_item (val, w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2649 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2650 GtkWidget *w;
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 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
2653 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2654
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2655 /* 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
2656 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
2657 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
2658 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
2659 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
2660 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
2661 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
2662 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
2663
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2664 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
2665 was NULL. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2666
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2667 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2668 xg_update_submenu (submenu, f, val,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2669 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
2670 GtkWidget *submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2671 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2672 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2673 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2674 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2675 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2676 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2677 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2678 GtkWidget *newsub = submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2679 GList *list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2680 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2681 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2682 int has_tearoff_p = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2683 GList *first_radio = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2684
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2685 if (submenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2686 list = gtk_container_get_children (GTK_CONTAINER (submenu));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2687
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2688 for (cur = val, iter = list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2689 cur && iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2690 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
2691 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2692 GtkWidget *w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2693
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2694 /* 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
2695 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
2696 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2697 has_tearoff_p = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2698 iter = g_list_next (iter);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2699 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
2700 else break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2701 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2702
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2703 /* 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
2704 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
2705 in GTK becomes correct. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2706 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
2707 first_radio = iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2708 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
2709 && ! GTK_IS_RADIO_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2710 first_radio = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2711
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2712 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
2713 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2714 if (! xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2715 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2716 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2717 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
2718 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2719 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
2720 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2721 xg_update_toggle_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2722 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
2723 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2724 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
2725 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2726 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
2727 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2728 xg_update_radio_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2729 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
2730 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2731 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
2732 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2733 GtkMenuItem *witem = GTK_MENU_ITEM (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2734 GtkWidget *sub;
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_NONE ||
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2737 xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2738 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2739
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2740 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
2741
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2742 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
2743 if (sub && ! cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2744 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2745 /* Not a submenu anymore. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2746 gtk_widget_ref (sub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2747 gtk_menu_item_remove_submenu (witem);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2748 gtk_widget_destroy (sub);
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 else if (cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2751 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2752 GtkWidget *nsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2753
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2754 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
2755 select_cb, deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2756 highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2757
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2758 /* 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
2759 if (nsub != sub)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2760 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
2761 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2762 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2763 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2764 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2765 /* 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
2766 in SUBMENU. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2767 break;
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 }
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 /* Remove widgets from first structual change. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2772 if (iter)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2773 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2774 /* 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
2775 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
2776 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
2777 else xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2778 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2779
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2780 if (cur)
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 /* More items added. Create them. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2783 newsub = create_menus (cur,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2784 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2785 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2786 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2787 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2788 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2789 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2790 ! has_tearoff_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2791 submenu,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2792 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2793 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2794 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2795
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2796 if (list) g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2797
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2798 return newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2799 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2800
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2801 /* Update the MENUBAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2802 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
2803 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
2804 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
2805 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
2806 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
2807 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
2808 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
2809
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2810 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2811 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
2812 select_cb, deactivate_cb, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2813 GtkWidget *menubar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2814 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2815 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2816 int deep_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2817 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2818 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2819 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2820 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2821 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2822 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
2823
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2824 if (! list) return;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2825
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2826 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
2827 XG_FRAME_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2828
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2829 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
2830 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
2831
64783
0975467abc17 * gtkutil.c (xg_modify_menubar_widgets): Remove semicolon that
Jan Djärv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
2832 if (deep_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2833 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2834 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2835
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2836 /* 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
2837 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
2838 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
2839
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2840 /* 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
2841 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
2842
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2843 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
2844 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2845 GList *iter;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2846 GtkWidget *sub = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2847 GtkWidget *newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2848 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2849
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2850 /* 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
2851 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
2852 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2853 witem = GTK_MENU_ITEM (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2854 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
2855 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2856 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
2857 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2858 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2859 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2860
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2861 newsub = xg_update_submenu (sub,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2862 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2863 cur->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2864 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2865 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2866 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2867 cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2868 /* 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
2869 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
2870 newly created sub menu under witem. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2871 if (newsub != sub)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2872 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2873 xg_set_screen (newsub, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2874 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
2875 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2876 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2877 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2878
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2879 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2880 gtk_widget_show_all (menubar);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2881 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2882
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2883 /* 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
2884 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
2885
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2886 int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2887 xg_update_frame_menubar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2888 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2889 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2890 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
2891 GtkRequisition req;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2892
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2893 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
2894 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2895
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2896 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2897
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2898 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
2899 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2900 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
2901
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2902 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
2903 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
2904
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2905 FRAME_MENUBAR_HEIGHT (f) = req.height;
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 /* 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
2908 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
2909 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
2910
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2911 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2912 UNBLOCK_INPUT;
50106
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
2913
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
2914 return 1;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2915 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2916
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2917 /* 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
2918 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
2919
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2920 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2921 free_frame_menubar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2922 FRAME_PTR f;
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 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
2925
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2926 if (x->menubar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2927 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2928 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2929
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2930 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
2931 /* 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
2932 the container. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2933 x->menubar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2934 FRAME_MENUBAR_HEIGHT (f) = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2935
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2936 /* 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
2937 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
2938 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
2939
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2940 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2941 UNBLOCK_INPUT;
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 }
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
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 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2948 Scroll bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2949 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2950
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2951
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2952 /* 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
2953 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
2954
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2955 int xg_ignore_gtk_scrollbar;
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_SCROLL_BAR_X_WINDOW assumes the second argument fits in
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2958 32 bits. But we want to store pointers, and they may be larger
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2959 than 32 bits. Keep a mapping from integer index to widget pointers
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2960 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
2961
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2962 static struct
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 GtkWidget **widgets;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2965 int max_size;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2966 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
2967 } id_to_widget;
49323
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 /* 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
2970
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2971 #define ID_TO_WIDGET_INCR 32
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2972
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2973 /* 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
2974
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2975 static int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2976 xg_store_widget_in_map (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2977 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2978 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2979 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2980
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2981 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
2982 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2983 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
2984
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2985 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
2986 sizeof (GtkWidget *)*new_size);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2987
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2988 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
2989 id_to_widget.widgets[i] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2990 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
2991 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2992
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2993 /* 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
2994 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
2995 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
2996 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
2997 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2998 if (! id_to_widget.widgets[i])
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2999 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3000 id_to_widget.widgets[i] = w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3001 ++id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3002
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3003 return i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3004 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3005 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3006
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3007 /* Should never end up here */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3008 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3009 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3010
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3011 /* 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
3012 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
3013
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3014 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3015 xg_remove_widget_from_map (idx)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3016 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3017 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3018 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
3019 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3020 id_to_widget.widgets[idx] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3021 --id_to_widget.used;
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 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3024
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3025 /* 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
3026
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3027 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3028 xg_get_widget_from_map (idx)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3029 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3030 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3031 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
3032 return id_to_widget.widgets[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 return 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
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3037 /* 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
3038 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
3039
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3040 int
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3041 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
3042 Display *dpy;
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3043 Window wid;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3044 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3045 int idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3046 GtkWidget *w;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3047
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3048 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
3049
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3050 if (w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3051 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3052 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
3053 if (id_to_widget.widgets[idx] == w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3054 return idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3055 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3056
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3057 return -1;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3058 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3059
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3060 /* 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
3061 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
3062 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
3063
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3064 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3065 xg_gtk_scroll_destroy (widget, data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3066 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3067 gpointer data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3068 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3069 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
3070 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
3071
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3072 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
3073 if (p) xfree (p);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3074 xg_remove_widget_from_map (id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3075 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3076
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3077 /* 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
3078 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
3079 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
3080 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
3081 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
3082 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
3083
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3084 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
3085 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
3086
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3087 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3088 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
3089 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3090 GdkEventButton *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3091 gpointer user_data;
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 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
3094 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
3095 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
3096 {
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
3097 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
3098 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
3099 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
3100 }
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
3101
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3102 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3103 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3104
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3105 /* 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
3106 in BAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3107 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
3108 bar changes.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3109 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
3110 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
3111
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3112 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3113 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
3114 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3115 struct scroll_bar *bar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3116 GCallback scroll_callback;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3117 char *scroll_bar_name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3118 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3119 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
3120 GtkWidget *webox;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3121 GtkObject *vadj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3122 int scroll_id;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3123
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3124 /* 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
3125 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
3126 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
3127 0.1, 0.1, 0.1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3128
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3129 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
3130 webox = gtk_event_box_new ();
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3131 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
3132 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
3133
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3134 scroll_id = xg_store_widget_in_map (wscroll);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3135
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
3136 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
3137 "value-changed",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3138 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
3139 (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
3140 /* 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
3141 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3142 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3143 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
3144 (gpointer) (EMACS_INT) scroll_id);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3145
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3146 /* 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
3147 has the pointer. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3148 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3149 "button-press-event",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3150 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
3151 (gpointer) bar);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3152 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3153 "button-release-event",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3154 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
3155 (gpointer) bar);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3156
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3157 /* 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
3158 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
3159 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
3160 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
3161 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
3162 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
3163 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
3164 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
3165
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3166
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3167 /* 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
3168 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
3169
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3170 SET_SCROLL_BAR_X_WINDOW (bar, scroll_id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3171 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3172
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3173 /* 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
3174
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3175 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3176 xg_show_scroll_bar (scrollbar_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3177 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3178 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3179 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
3180 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
3181 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
3182 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3183
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3184 /* 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
3185
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3186 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3187 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
3188 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3189 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3190 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3191 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
3192 if (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3193 {
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3194 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
3195 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
3196 gtk_widget_destroy (wparent);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3197 SET_FRAME_GARBAGED (f);
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3201 /* 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
3202 in frame F.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3203 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
3204 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
3205
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3206 void
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3207 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
3208 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3209 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3210 int top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3211 int left;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3212 int width;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3213 int height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3214 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3215
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3216 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
3217
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3218 if (wscroll)
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3219 {
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
3220 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
3221 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
3222
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3223 /* 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
3224 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
3225 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
3226 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
3227 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
3228 /* 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
3229 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
3230 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
3231 x_sync (f);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3232 SET_FRAME_GARBAGED (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3233 cancel_mouse_face (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3234 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3235 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3236
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3237 /* 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
3238 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
3239
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3240 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3241 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
3242 struct scroll_bar *bar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3243 int portion, position, whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3244 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3245 GtkWidget *wscroll = xg_get_widget_from_map (SCROLL_BAR_X_WINDOW (bar));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3246
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3247 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
3248
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
3249 if (wscroll && NILP (bar->dragging))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3250 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3251 GtkAdjustment *adj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3252 gdouble shown;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3253 gdouble top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3254 int size, value;
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3255 int new_step;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3256 int changed = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3257
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3258 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
3259
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
3260 /* 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
3261 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
3262 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
3263 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
3264 /* 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
3265 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
3266 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
3267
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3268 if (whole <= 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3269 top = 0, shown = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3270 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3271 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3272 top = (gdouble) position / whole;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3273 shown = (gdouble) portion / whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3274 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3275
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3276 size = shown * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3277 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
3278 size = max (size, 1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3279
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3280 value = top * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3281 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
3282 value = max (value, XG_SB_MIN);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3283
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3284 /* 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
3285 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
3286
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
3287 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
3288 || (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
3289 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3290 adj->page_size = size;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3291 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
3292 /* 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
3293 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
3294 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
3295 }
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
3296
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3297 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
3298 {
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3299 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
3300
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3301 BLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3302
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3303 /* 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
3304 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
3305 xg_ignore_gtk_scrollbar = 1;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3306
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3307 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
3308 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
3309 else if (changed)
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3310 gtk_adjustment_changed (adj);
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3311
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3312 xg_ignore_gtk_scrollbar = 0;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3313
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3314 UNBLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3315 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3316 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3317 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3318
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3319
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3320 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3321 Tool bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3322 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3323 /* 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
3324 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
3325 the GtkImage with a new image. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3326 #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
3327
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3328 /* 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
3329 get them. */
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3330 #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
3331
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3332 /* 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
3333 #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
3334
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3335 static gboolean
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3336 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
3337 GtkWidget *widget;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3338 GdkEventButton *event;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3339 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
3340 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3341 /* 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
3342 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
3343 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
3344 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
3345 }
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3346
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3347
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3348 /* 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
3349 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
3350 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
3351 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
3352
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3353 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3354 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
3355 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3356 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3357 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3358 /* 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
3359 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
3360 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
3361 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
3362
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3363 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
3364 Lisp_Object key, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3365 struct input_event event;
51569
e7bd8581e306 (xg_tool_bar_callback): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51432
diff changeset
3366 EVENT_INIT (event);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3367
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3368 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
3369 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3370
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3371 idx *= TOOL_BAR_ITEM_NSLOTS;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3372
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3373 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
3374 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
3375
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3376 /* 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
3377 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
3378 event.kind = TOOL_BAR_EVENT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3379 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
3380 event.arg = frame;
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3381 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
3382
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3383 event.kind = TOOL_BAR_EVENT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3384 event.frame_or_window = frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3385 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
3386 /* 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
3387 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
3388 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
3389 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
3390 kbd_buffer_store_event (&event);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3391 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3392
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3393 /* 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
3394 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
3395 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
3396 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
3397 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
3398 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
3399
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3400 static void
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3401 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
3402 GtkWidget *w;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3403 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
3404 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3405 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
3406 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
3407 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
3408 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3409
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3410 /* 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
3411 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
3412 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
3413 blank. */
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3414
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3415 static gboolean
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3416 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
3417 GtkToolItem *toolitem;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3418 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
3419 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3420 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
3421 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
3422 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
3423 GtkWidget *wmenuimage;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3424
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3425 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
3426 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
3427 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
3428 else
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 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
3431 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
3432 GtkImageType store_type = gtk_image_get_storage_type (wimage);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3433 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
3434 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3435 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
3436 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
3437 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
3438 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3439 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
3440 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3441 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
3442 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
3443 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
3444 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
3445 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3446 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
3447 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3448 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
3449
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3450 if (settings &&
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3451 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
3452 &width, &height))
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3453 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3454 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
3455
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3456 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
3457 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
3458 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
3459
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3460 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
3461 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3462 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3463 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3464 if (wmenuimage)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3465 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
3466
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3467 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
3468 "activate",
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3469 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
3470 user_data);
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 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
3473 (gpointer) wbutton);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3474 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
3475
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3476 return TRUE;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3477 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3478
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3479 /* 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
3480 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
3481 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3482 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
3483 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3484 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
3485
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3486 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3487 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
3488 GtkHandleBox *wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3489 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3490 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3491 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3492 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
3493 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
3494
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
3495 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
3496 NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3497
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3498 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3499 {
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3500 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
3501
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3502 /* 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
3503 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
3504 place. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3505 FRAME_TOOLBAR_HEIGHT (f) = 2;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3506
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3507 /* 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
3508 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
3509 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
3510 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3511 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3512
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3513 /* 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
3514 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
3515 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3516 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
3517 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3518 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
3519
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3520 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3521 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
3522 GtkHandleBox *wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3523 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3524 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3525 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3526 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
3527 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
3528
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3529 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3530 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3531 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3532
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3533 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
3534
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3535 gtk_widget_size_request (w, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3536 FRAME_TOOLBAR_HEIGHT (f) = req.height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3537
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3538 /* 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
3539 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
3540 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
3541 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3542 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3543
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3544 /* 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
3545 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
3546 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
3547 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
3548 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
3549 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
3550
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3551 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
3552
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3553 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3554 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
3555 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3556 GdkEventCrossing *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3557 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3558 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3559 /* 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
3560 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
3561 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
3562 Lisp_Object help, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3563
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3564 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
3565 return FALSE;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3566
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3567 if (event->type == GDK_ENTER_NOTIFY)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3568 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3569 idx *= TOOL_BAR_ITEM_NSLOTS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3570 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
3571
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3572 if (NILP (help))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3573 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
3574 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3575 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3576 help = Qnil;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3577
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3578 XSETFRAME (frame, f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3579 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
3580
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3581 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3582 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3583
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3584
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3585 /* 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
3586 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
3587 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
3588 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
3589 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
3590 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
3591 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
3592
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3593 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
3594
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3595 static gboolean
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3596 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
3597 GtkWidget *w;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3598 GdkEventExpose *event;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3599 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
3600 {
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3601 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
3602
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3603 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
3604
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3605 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
3606 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
3607
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3608 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
3609 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
3610
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3611 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
3612 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
3613
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3614 return FALSE;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3615 }
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3616
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3617 /* This callback is called when a tool bar shall be redrawn.
78690
4eb8619e3abd (xg_tool_bar_expose_callback): Just do SET_FRAME_GARBAGED
Jan Djärv <jan.h.d@swipnet.se>
parents: 78538
diff changeset
3618 We need to update the images in case the image cache
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3619 has deleted the pixmaps used in the tool bar.
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3620 W is the GtkToolbar to be redrawn.
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3621 EVENT is the expose event for W.
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3622 CLIENT_DATA is pointing to the frame for this tool bar.
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3623
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3624 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
3625
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3626 static gboolean
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3627 xg_tool_bar_expose_callback (w, event, client_data)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3628 GtkWidget *w;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3629 GdkEventExpose *event;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3630 gpointer client_data;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3631 {
78690
4eb8619e3abd (xg_tool_bar_expose_callback): Just do SET_FRAME_GARBAGED
Jan Djärv <jan.h.d@swipnet.se>
parents: 78538
diff changeset
3632 FRAME_PTR f = (FRAME_PTR) client_data;
4eb8619e3abd (xg_tool_bar_expose_callback): Just do SET_FRAME_GARBAGED
Jan Djärv <jan.h.d@swipnet.se>
parents: 78538
diff changeset
3633 SET_FRAME_GARBAGED (f);
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3634 return FALSE;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3635 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3636
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3637 /* 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
3638
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3639 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3640 xg_create_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3641 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3642 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3643 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
3644 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3645 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
3646
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3647 x->toolbar_widget = gtk_toolbar_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3648 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
3649 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
3650
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3651 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
3652 x->toolbar_widget);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3653
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3654 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
3655 FALSE, FALSE, 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3656
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3657 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
3658 vbox_pos);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3659
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3660 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
3661
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3662 /* 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
3663 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
3664 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
3665 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
3666 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
3667 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
3668 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
3669 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
3670 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
3671 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
3672
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3673 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
3674 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
3675 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
3676 G_CALLBACK (xg_tool_bar_attach_callback), f);
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3677 g_signal_connect (G_OBJECT (x->toolbar_widget),
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3678 "expose-event",
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3679 G_CALLBACK (xg_tool_bar_expose_callback),
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3680 f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3681
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3682 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
3683
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3684 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
3685 FRAME_TOOLBAR_HEIGHT (f) = req.height;
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 /* 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
3688 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
3689 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
3690
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3691 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3692 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3693
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3694 /* 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
3695
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3696 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3697 update_frame_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3698 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3699 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3700 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3701 GtkRequisition old_req, new_req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3702 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
3703 int hmargin = 0, vmargin = 0;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3704 GtkToolItem *ti;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3705
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3706 if (! FRAME_GTK_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3707 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3708
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3709 BLOCK_INPUT;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3710
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3711 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
3712 && 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
3713 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3714 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
3715 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
3716 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3717 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
3718 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3719 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
3720 && 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
3721 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
3722
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3723 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
3724 && 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
3725 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
3726 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3727
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3728 /* 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
3729 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
3730 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
3731 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
3732 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
3733 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
3734
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3735 if (! x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3736 xg_create_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3737
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3738 gtk_widget_size_request (x->toolbar_widget, &old_req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3739
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3740 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
3741 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3742 #define PROP(IDX) AREF (f->tool_bar_items, i * TOOL_BAR_ITEM_NSLOTS + (IDX))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3743
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3744 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
3745 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
3746 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3747 int img_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3748 struct image *img;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3749 Lisp_Object image;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3750 GtkWidget *wbutton;
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3751 GtkWidget *weventbox;
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3752
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3753 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
3754
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3755 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
3756 {
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3757 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
3758 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
3759 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3760
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3761 /* If image is a vector, choose the image according to the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3762 button state. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3763 image = PROP (TOOL_BAR_ITEM_IMAGES);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3764 if (VECTORP (image))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3765 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3766 if (enabled_p)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3767 idx = (selected_p
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3768 ? TOOL_BAR_IMAGE_ENABLED_SELECTED
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3769 : TOOL_BAR_IMAGE_ENABLED_DESELECTED);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3770 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3771 idx = (selected_p
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3772 ? TOOL_BAR_IMAGE_DISABLED_SELECTED
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3773 : TOOL_BAR_IMAGE_DISABLED_DESELECTED);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3774
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3775 xassert (ASIZE (image) >= idx);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3776 image = AREF (image, idx);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3777 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3778 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3779 idx = -1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3780
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3781 /* Ignore invalid image specifications. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3782 if (!valid_image_p (image))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3783 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3784 if (ti) gtk_widget_hide_all (GTK_WIDGET (ti));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3785 continue;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3786 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3787
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3788 img_id = lookup_image (f, image);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3789 img = IMAGE_FROM_ID (f, img_id);
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
3790 prepare_image_for_display (f, img);
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3791
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3792 if (img->load_failed_p || img->pixmap == None)
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3793 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3794 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
3795 gtk_widget_hide_all (GTK_WIDGET (ti));
73661
7c60775b5a52 * gtkutil.c (update_frame_tool_bar): If icon image is invalid and
Chong Yidong <cyd@stupidchicken.com>
parents: 73389
diff changeset
3796 else
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3797 {
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3798 /* Insert an empty (non-image) button */
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3799 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
3800 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
3801 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
3802 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
3803 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
3804 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
3805 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
3806 gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), ti, -1);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3807 }
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
3808 continue;
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3809 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3810
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3811 if (ti == NULL)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3812 {
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
3813 GtkWidget *w = xg_get_image_for_pixmap (f, img, x->widget, NULL);
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3814 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
3815 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
3816 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
3817 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
3818 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
3819 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
3820 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
3821 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
3822 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
3823 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
3824
42ad3938ee1a (update_frame_tool_bar): Handle modifying a toolbar item
Jan Djärv <jan.h.d@swipnet.se>
parents: 73661
diff changeset
3825
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3826 /* 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
3827 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
3828 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
3829 (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
3830
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3831 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
3832 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
3833 (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
3834
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3835 gtk_widget_show_all (GTK_WIDGET (ti));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3836
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3837 /* Save the image so we can see if an update is needed when
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3838 this function is called again. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3839 g_object_set_data (G_OBJECT (w), XG_TOOL_BAR_IMAGE_DATA,
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
3840 (gpointer)img->pixmap);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3841
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3842 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
3843
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3844 /* 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
3845 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
3846 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
3847 "expose-event",
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3848 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
3849 0);
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3850
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3851 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
3852 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
3853
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3854 /* 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
3855 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
3856 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
3857 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
3858 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
3859 NULL);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3860
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3861 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
3862
4e4d545ce006 * gtkutil.c (update_frame_tool_bar): Use new tool bar functions
Jan Djärv <jan.h.d@swipnet.se>
parents: 68100
diff changeset
3863 /* 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
3864 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
3865 "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
3866 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
3867 /* 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
3868 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
3869 "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
3870 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
3871 (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
3872 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
3873 "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
3874 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
3875 (gpointer) (EMACS_INT) i);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3876 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3877 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3878 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3879 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
3880 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
3881 XG_TOOL_BAR_IMAGE_DATA);
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3882 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
3883
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
3884 if (old_img != img->pixmap)
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
3885 (void) xg_get_image_for_pixmap (f, img, x->widget, wimage);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3886
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3887 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
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
3888 (gpointer)img->pixmap);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3889
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3890 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
3891 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
3892 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3893
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3894 #undef PROP
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3895 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3896
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3897 /* 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
3898 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
3899 do
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3900 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3901 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
3902 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
3903 } while (ti != NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3904
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3905 gtk_widget_size_request (x->toolbar_widget, &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
3906 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
3907 && ! 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
3908 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3909 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
3910 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
3911 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3912
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3913 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3914 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3915
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3916 /* 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
3917 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
3918
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3919 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3920 free_frame_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3921 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3922 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3923 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
3924
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3925 if (x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3926 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3927 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3928 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
3929 x->handlebox_widget);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3930 x->toolbar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3931 x->handlebox_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3932 FRAME_TOOLBAR_HEIGHT (f) = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3933
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3934 /* 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
3935 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
3936 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
3937
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3938 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3939 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3940 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3941 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3942
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3943
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3944
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3945 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3946 Initializing
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3947 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3948 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3949 xg_initialize ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3950 {
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
3951 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
3952
75417
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
3953 #if HAVE_XFT
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
3954 /* 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
3955 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
3956 XftInit (0);
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
3957 #endif
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3958 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
3959 xg_detached_menus = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3960 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
3961 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
3962
49419
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
3963 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
3964 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
3965
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3966 /* 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
3967 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
3968 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
3969 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
3970 "gtk-menu-bar-accel",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3971 "VoidSymbol",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3972 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
3973
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
3974 /* 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
3975 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
3976 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
3977 "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
3978 "Emacs",
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
3979 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
3980
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
3981 /* 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
3982 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
3983 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
3984 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
3985 "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
3986
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
3987 /* 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
3988 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
3989 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
3990 "cancel", 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3991 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3992
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3993 #endif /* USE_GTK */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
3994
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
3995 /* arch-tag: fe7104da-bc1e-4aba-9bd1-f349c528f7e3
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
3996 (do not change this comment) */