annotate src/gtkutil.c @ 107039:2220de986185

* arc-mode.el (archive-zip-extract): Quote the argument passed to unzip (Bug#5475).
author Chong Yidong <cyd@stupidchicken.com>
date Thu, 28 Jan 2010 15:06:36 -0500
parents 1d1d5d9bd884
children 07507204ac6f
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.
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106720
diff changeset
2 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 79460
diff changeset
3 Free Software Foundation, Inc.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
5 This file is part of GNU Emacs.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
6
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93427
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93427
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93427
diff changeset
10 (at your option) any later version.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
11
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
15 GNU General Public License for more details.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
16
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93427
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
19
80608
83a48972e1ea Include <config.h> instead of "config.h".
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 79759
diff changeset
20 #include <config.h>
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
21
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
22 #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
23 #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
24 #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
25 #include <stdio.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105522
diff changeset
26 #include <setjmp.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 "gtkutil.h"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
33 #include "termhooks.h"
51408
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
34 #include "keyboard.h"
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
35 #include "charset.h"
8f1bed1dee3c Include keyboard.h, charset.h, coding.h.
Dave Love <fx@gnu.org>
parents: 51211
diff changeset
36 #include "coding.h"
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
37 #include <gdk/gdkkeysyms.h>
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
38
97059
984f2ac5a637 * lisp.h (init_weak_hash_tables, syms_of_font)
Andreas Schwab <schwab@suse.de>
parents: 97056
diff changeset
39 #ifdef HAVE_XFT
984f2ac5a637 * lisp.h (init_weak_hash_tables, syms_of_font)
Andreas Schwab <schwab@suse.de>
parents: 97056
diff changeset
40 #include <X11/Xft/Xft.h>
984f2ac5a637 * lisp.h (init_weak_hash_tables, syms_of_font)
Andreas Schwab <schwab@suse.de>
parents: 97056
diff changeset
41 #endif
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
42
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
43 #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
44 (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
45
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
46 /* 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
47 #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
48
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
49
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
50 /***********************************************************************
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
51 Display handling functions
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
52 ***********************************************************************/
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
53
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
54 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
55
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
56 /* Keep track of the default display, or NULL if there is none. Emacs
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
57 may close all its displays. */
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
58
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
59 static GdkDisplay *gdpy_def;
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
60
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
61 /* 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
62
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
63 static GdkDisplay *
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
64 xg_get_gdk_display (dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
65 Display *dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
66 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
67 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
68 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
69
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
70 /* 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
71 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
72 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
73
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
74 static void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
75 xg_set_screen (w, f)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
76 GtkWidget *w;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
77 FRAME_PTR f;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
78 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
79 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
80 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
81 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
82 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
83
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
84 if (GTK_IS_MENU (w))
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
85 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
86 else
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
87 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
88 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
89 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
90
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
91
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
92 #else /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
93
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
94 /* 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
95 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
96
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
97 #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
98 #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
99 #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
100 #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
101 #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
102 #define GdkDisplay void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
103
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
104 #endif /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
105
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
106 /* 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
107 *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
108
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
109 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
110 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
111 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
112
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
113 int
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
114 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
115 char *display_name;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
116 Display **dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
117 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
118 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
119 GdkDisplay *gdpy;
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 gdpy = gdk_display_open (display_name);
102705
36389825b3d8 gtkutil.c (xg_display_open): Assign a value to gdpy_def, check
Jan Djärv <jan.h.d@swipnet.se>
parents: 102549
diff changeset
122 if (!gdpy_def && gdpy)
36389825b3d8 gtkutil.c (xg_display_open): Assign a value to gdpy_def, check
Jan Djärv <jan.h.d@swipnet.se>
parents: 102549
diff changeset
123 {
36389825b3d8 gtkutil.c (xg_display_open): Assign a value to gdpy_def, check
Jan Djärv <jan.h.d@swipnet.se>
parents: 102549
diff changeset
124 gdpy_def = gdpy;
36389825b3d8 gtkutil.c (xg_display_open): Assign a value to gdpy_def, check
Jan Djärv <jan.h.d@swipnet.se>
parents: 102549
diff changeset
125 gdk_display_manager_set_default_display (gdk_display_manager_get (),
36389825b3d8 gtkutil.c (xg_display_open): Assign a value to gdpy_def, check
Jan Djärv <jan.h.d@swipnet.se>
parents: 102549
diff changeset
126 gdpy);
36389825b3d8 gtkutil.c (xg_display_open): Assign a value to gdpy_def, check
Jan Djärv <jan.h.d@swipnet.se>
parents: 102549
diff changeset
127 }
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
128
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
129 *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
130 return gdpy != NULL;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
131
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
132 #else /* not HAVE_GTK_MULTIDISPLAY */
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 return -1;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
135 #endif /* not HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
136 }
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
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
139 /* 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
140
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
141 void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
142 xg_display_close (Display *dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
143 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
144 #ifdef HAVE_GTK_MULTIDISPLAY
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
145 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
146
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
147 /* If this is the default display, try to change it before closing.
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
148 If there is no other display to use, gdpy_def is set to NULL, and
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
149 the next call to xg_display_open resets the default display. */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
150 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
151 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
152 struct x_display_info *dpyinfo;
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
153 GdkDisplay *gdpy_new = NULL;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
154
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
155 /* Find another display. */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
156 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
157 if (dpyinfo->display != dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
158 {
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
159 gdpy_new = gdk_x11_lookup_xdisplay (dpyinfo->display);
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
160 gdk_display_manager_set_default_display (gdk_display_manager_get (),
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
161 gdpy_new);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
162 break;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
163 }
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
164 gdpy_def = gdpy_new;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
165 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
166
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
167 #if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 10
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
168 /* GTK 2.2-2.8 has a bug that makes gdk_display_close crash (bug
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
169 http://bugzilla.gnome.org/show_bug.cgi?id=85715). This way we
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
170 can continue running, but there will be memory leaks. */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
171 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
172 #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
173 /* 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
174 gdk_display_close (gdpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
175 #endif
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
176 #endif /* HAVE_GTK_MULTIDISPLAY */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
177 }
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
178
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
179
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
180 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
181 Utility functions
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 /* 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
184 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
185 static int malloc_cpt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
186
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
187 /* 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
188 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
189
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
190 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
191
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
192 widget_value *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
193 malloc_widget_value ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
194 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
195 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
196 if (widget_value_free_list)
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 wv = widget_value_free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
199 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
200 wv->free_list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
201 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
202 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
203 {
69025
5d9232b72d14 (malloc_widget_value): Use xmalloc.
Richard M. Stallman <rms@gnu.org>
parents: 68922
diff changeset
204 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
205 malloc_cpt++;
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 memset (wv, 0, sizeof (widget_value));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
208 return wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
209 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
210
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
211 /* 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
212 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
213
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
214 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
215 free_widget_value (wv)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
216 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
217 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
218 if (wv->free_list)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
219 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
220
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
221 if (malloc_cpt > 25)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
222 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
223 /* 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
224 We free it. */
100633
5395c014feb8 * buffer.c (init_buffer): Use realloc instead of xrealloc.
Andreas Schwab <schwab@suse.de>
parents: 100501
diff changeset
225 xfree (wv);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
226 malloc_cpt--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
227 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
228 else
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 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
231 widget_value_free_list = wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
232 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
233 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
234
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
235
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
236 /* 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
237 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
238
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
239 GdkCursor *
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
240 xg_create_default_cursor (dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
241 Display *dpy;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
242 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
243 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
244 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
245 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
246
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
247 /* 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
248
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
249 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
250 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
251 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
252 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
253 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
254 {
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 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
256 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
257 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
258 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
259
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 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
261 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
262 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
263 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
264 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
265
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 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
267 {
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 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
269 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
270 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
271 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
272 width, height);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
273 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
274 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
275 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
276 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
277 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
278
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 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
280 {
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 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
282 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
283
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 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
285 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
286
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 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
288 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
289 /* 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
290 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
291 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
292 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
293
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
294 iconptr += 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
295 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
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
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 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
300 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
301
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
302 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
303 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
304
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
305 static Lisp_Object
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
306 file_for_image (image)
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
307 Lisp_Object image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
308 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
309 Lisp_Object specified_file = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
310 Lisp_Object tail;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
311 extern Lisp_Object QCfile;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
312
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
313 for (tail = XCDR (image);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
314 NILP (specified_file) && CONSP (tail) && CONSP (XCDR (tail));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
315 tail = XCDR (XCDR (tail)))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
316 if (EQ (XCAR (tail), QCfile))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
317 specified_file = XCAR (XCDR (tail));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
318
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
319 return specified_file;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
320 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
321
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
322 /* 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
323 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
324 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
325 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
326 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
327 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
328 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
329 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
330 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
331 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
332
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
333 static GtkWidget *
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
334 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
335 FRAME_PTR f;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
336 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
337 GtkWidget *widget;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
338 GtkImage *old_widget;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
339 {
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
340 GdkPixmap *gpix;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
341 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
342 GdkDisplay *gdpy;
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
343 GdkColormap *cmap;
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
344 GdkPixbuf *icon_buf;
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
345
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
346 /* 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
347 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
348 look good in all cases. */
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
349 Lisp_Object specified_file = file_for_image (img->spec);
69141
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
350 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
351
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
352 /* 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
353 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
354 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
355
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
356 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
357 && 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
358 {
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
359 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
360 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
361 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
362 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
363
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
364 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
365 }
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
366
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
367 /* 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
368 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
369 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
370
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
371 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
372 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
373 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
374
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
375 /* This is a workaround to make icons look good on pseudo color
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
376 displays. Apparently GTK expects the images to have an alpha
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
377 channel. If they don't, insensitive and activated icons will
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
378 look bad. This workaround does not work on monochrome displays,
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
379 and is strictly not needed on true color/static color displays (i.e.
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
380 16 bits and higher). But we do it anyway so we get a pixbuf that is
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
381 not associated with the img->pixmap. The img->pixmap may be removed
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
382 by clearing the image cache and then the tool bar redraw fails, since
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
383 Gtk+ assumes the pixmap is always there. */
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
384 cmap = gtk_widget_get_colormap (widget);
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
385 icon_buf = xg_get_pixbuf_from_pix_and_mask (gpix, gmask, cmap);
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
386
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
387 if (! old_widget)
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
388 old_widget = GTK_IMAGE (gtk_image_new_from_pixbuf (icon_buf));
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
389 else
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
390 gtk_image_set_from_pixbuf (old_widget, icon_buf);
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
391
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
392 g_object_unref (G_OBJECT (icon_buf));
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
393
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
394 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
395 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
396
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
397 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
398 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
399
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
400
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
401 /* 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
402 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
403 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
404
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
405 static void
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
406 xg_set_cursor (w, cursor)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
407 GtkWidget *w;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
408 GdkCursor *cursor;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
409 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
410 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
411
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
412 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
413
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
414 /* 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
415 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
416 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
417 Ditto for menus. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
418
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
419 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
420 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
421 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
422
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
423 /* 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
424
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
425 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
426 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
427 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
428 xg_list_node *list_start = list->next;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
429
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
430 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
431 node->next = list_start;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
432 node->prev = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
433 list->next = node;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
434 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
435
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
436 /* 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
437
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
438 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
439 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
440 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
441 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
442 if (node == list_start)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
443 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
444 list->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
445 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
446 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
447 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
448 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
449 node->prev->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
450 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
451 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
452 }
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 /* 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
455 utf8 or NULL, just return STR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
456 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
457 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
458
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
459 static char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
460 get_utf8_string (str)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
461 char *str;
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 char *utf8_str = str;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
464
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
465 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
466
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
467 /* 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
468 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
469 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
470
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
471 if (!utf8_str)
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
472 {
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
473 /* 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
474 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
475 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
476 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
477 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
478 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
479 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
480
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
481 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
482 &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
483 && 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
484 {
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
485 ++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
486 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
487 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
488 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
489 }
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
490
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
491 if (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
492 {
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
493 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
494 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
495 }
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
496 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
497
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
498 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
499 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
500
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
501 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
502 &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
503 && 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
504 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
505 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
506 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
507 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
508 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
509 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
510 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
511 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
512 }
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
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
514 if (cp)
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
515 {
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 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
517 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
518 }
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
519 if (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
520 {
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 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
522 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
523 }
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 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
525 return utf8_str;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
526 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
527
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
528
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
529
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
530 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
531 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
532 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
533
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
534 /* 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
535 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
536 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
537 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
538
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
539 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
540 xg_set_geometry (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
541 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
542 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
543 if (f->size_hint_flags & USPosition)
93427
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
544 {
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
545 int left = f->left_pos;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
546 int xneg = f->size_hint_flags & XNegative;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
547 int top = f->top_pos;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
548 int yneg = f->size_hint_flags & YNegative;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
549 char geom_str[32];
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
550
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
551 if (xneg)
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
552 left = -left;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
553 if (yneg)
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
554 top = -top;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
555
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
556 sprintf (geom_str, "=%dx%d%c%d%c%d",
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
557 FRAME_PIXEL_WIDTH (f),
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
558 FRAME_TOTAL_PIXEL_HEIGHT (f),
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
559 (xneg ? '-' : '+'), left,
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
560 (yneg ? '-' : '+'), top);
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
561
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
562 if (!gtk_window_parse_geometry (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
563 geom_str))
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
564 fprintf (stderr, "Failed to parse: '%s'\n", geom_str);
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
565 }
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
566 else if (f->size_hint_flags & PPosition)
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
567 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
568 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
569 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
570
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
571 /* Clear under internal border if any. As we use a mix of Gtk+ and X calls
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
572 and use a GtkFixed widget, this doesn't happen automatically. */
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
573
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
574 static void
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
575 xg_clear_under_internal_border (f)
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
576 FRAME_PTR f;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
577 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
578 if (FRAME_INTERNAL_BORDER_WIDTH (f) > 0)
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
579 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
580 GtkWidget *wfixed = f->output_data.x->edit_widget;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
581 gtk_widget_queue_draw (wfixed);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
582 gdk_window_process_all_updates ();
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
583 x_clear_area (FRAME_X_DISPLAY (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
584 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
585 0, 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
586 FRAME_PIXEL_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
587 FRAME_INTERNAL_BORDER_WIDTH (f), 0);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
588 x_clear_area (FRAME_X_DISPLAY (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
589 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
590 0, 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
591 FRAME_INTERNAL_BORDER_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
592 FRAME_PIXEL_HEIGHT (f), 0);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
593 x_clear_area (FRAME_X_DISPLAY (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
594 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
595 0, FRAME_PIXEL_HEIGHT (f) - FRAME_INTERNAL_BORDER_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
596 FRAME_PIXEL_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
597 FRAME_INTERNAL_BORDER_WIDTH (f), 0);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
598 x_clear_area (FRAME_X_DISPLAY (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
599 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
600 FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
601 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
602 FRAME_INTERNAL_BORDER_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
603 FRAME_PIXEL_HEIGHT (f), 0);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
604 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
605 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
606
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
607 /* Function to handle resize of our frame. As we have a Gtk+ tool bar
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
608 and a Gtk+ menu bar, we get resize events for the edit part of the
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
609 frame only. We let Gtk+ deal with the Gtk+ parts.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
610 F is the frame to resize.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
611 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
612
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
613 void
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
614 xg_frame_resized (f, pixelwidth, pixelheight)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
615 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
616 int pixelwidth, pixelheight;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
617 {
103690
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
618 int rows, columns;
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
619
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
620 if (pixelwidth == -1 && pixelheight == -1)
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
621 {
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
622 if (FRAME_GTK_WIDGET (f) && GTK_WIDGET_MAPPED (FRAME_GTK_WIDGET (f)))
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
623 gdk_window_get_geometry (FRAME_GTK_WIDGET (f)->window, 0, 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
624 &pixelwidth, &pixelheight, 0);
103690
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
625 else return;
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
626 }
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
627
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
628
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
629 rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, pixelheight);
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
630 columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, pixelwidth);
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
631
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
632 if (columns != FRAME_COLS (f)
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
633 || rows != FRAME_LINES (f)
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
634 || pixelwidth != FRAME_PIXEL_WIDTH (f)
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
635 || pixelheight != FRAME_PIXEL_HEIGHT (f))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
636 {
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
637 FRAME_PIXEL_WIDTH (f) = pixelwidth;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
638 FRAME_PIXEL_HEIGHT (f) = pixelheight;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
639
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
640 xg_clear_under_internal_border (f);
100498
b5964e7e169b (xg_frame_resized): Remove check if rows/columns have
Jan Djärv <jan.h.d@swipnet.se>
parents: 100100
diff changeset
641 change_frame_size (f, rows, columns, 0, 1, 0);
b5964e7e169b (xg_frame_resized): Remove check if rows/columns have
Jan Djärv <jan.h.d@swipnet.se>
parents: 100100
diff changeset
642 SET_FRAME_GARBAGED (f);
b5964e7e169b (xg_frame_resized): Remove check if rows/columns have
Jan Djärv <jan.h.d@swipnet.se>
parents: 100100
diff changeset
643 cancel_mouse_face (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
644 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
645 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
646
93427
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
647 /* Resize the outer window of frame F after chainging the height.
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
648 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
649
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
650 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
651 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
652 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
653 int cols;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
654 int rows;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
655 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
656 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
657 + 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
658 int pixelwidth;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
659
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
660 if (FRAME_PIXEL_HEIGHT (f) == 0)
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
661 return;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
662
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
663 /* 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
664 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
665 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
666 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
667 windows. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
668 f->scroll_bar_actual_width
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
669 = 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
670
50099
a62497b91c74 Use generic compute_fringe_widths.
Kim F. Storm <storm@cua.dk>
parents: 50063
diff changeset
671 compute_fringe_widths (f, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
672
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
673 /* 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
674 after calculating that value. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
675 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
676
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
677
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
678 /* Do this before resize, as we don't know yet if we will be resized. */
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
679 xg_clear_under_internal_border (f);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
680
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
681 /* Must resize our top level widget. Font size may have changed,
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
682 but not rows/cols. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
683 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
684 pixelwidth, pixelheight);
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
685 x_wm_set_size_hint (f, 0, 0);
103198
f63bce93c7a1 * gtkutil.c (xg_frame_set_char_size): Set frame pixel width/height to
Jan Djärv <jan.h.d@swipnet.se>
parents: 103022
diff changeset
686
105693
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
687 SET_FRAME_GARBAGED (f);
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
688 cancel_mouse_face (f);
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
689
103690
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
690 /* We can not call change_frame_size for a mapped frame,
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
691 we can not set pixel width/height either. The window manager may
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
692 override our resize request, XMonad does this all the time.
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
693 The best we can do is try to sync, so lisp code sees the updated
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
694 size as fast as possible.
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
695 For unmapped windows, we can set rows/cols. When
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
696 the frame is mapped again we will (hopefully) get the correct size. */
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
697 if (f->async_visible)
105693
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
698 {
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
699 /* Must call this to flush out events */
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
700 (void)gtk_events_pending ();
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
701 gdk_flush ();
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
702 x_wait_for_event (f, ConfigureNotify);
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
703 }
103690
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
704 else
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
705 {
105693
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
706 change_frame_size (f, rows, cols, 0, 1, 0);
103690
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
707 FRAME_PIXEL_WIDTH (f) = pixelwidth;
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
708 FRAME_PIXEL_HEIGHT (f) = pixelheight;
6cf0c4de552b * gtkutil.c (xg_frame_set_char_size): Do set width/height if the
Jan Djärv <jan.h.d@swipnet.se>
parents: 103688
diff changeset
709 }
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
710 }
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
711
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
712 /* Handle height changes (i.e. add/remove menu/toolbar).
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
713 The policy is to keep the number of editable lines. */
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
714
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
715 static void
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
716 xg_height_changed (f)
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
717 FRAME_PTR f;
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
718 {
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
719 gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
720 FRAME_PIXEL_WIDTH (f), FRAME_TOTAL_PIXEL_HEIGHT (f));
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
721 f->output_data.x->hint_flags = 0;
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
722 x_wm_set_size_hint (f, 0, 0);
49323
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
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
725 /* 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
726 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
727 X Window that aren't accessible.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
728
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
729 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
730
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
731 GtkWidget *
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
732 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
733 Display *dpy;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
734 Window wdesc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
735 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
736 gpointer gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
737 GtkWidget *gwdesc = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
738
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
739 BLOCK_INPUT;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
740
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
741 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
742 wdesc);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
743 if (gdkwin)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
744 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
745 GdkEvent event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
746 event.any.window = gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
747 gwdesc = gtk_get_event_widget (&event);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
748 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
749
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
750 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
751 return gwdesc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
752 }
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 /* 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
755 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
756
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
757 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
758 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
759 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
760 unsigned long pixel;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
761 GdkColor *c;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
762 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
763 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
764 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
765 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
766
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
767 /* 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
768 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
769
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
770 int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
771 xg_create_frame_widgets (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
772 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
773 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
774 GtkWidget *wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
775 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
776 GtkWidget *wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
777 GdkColor bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
778 GtkRcStyle *style;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
779 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
780 char *title = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
781
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
782 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
783
91632
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
784 if (FRAME_X_EMBEDDED_P (f))
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
785 wtop = gtk_plug_new (f->output_data.x->parent_desc);
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
786 else
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
787 wtop = gtk_window_new (GTK_WINDOW_TOPLEVEL);
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
788
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
789 xg_set_screen (wtop, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
790
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
791 wvbox = gtk_vbox_new (FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
792 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
793
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
794 if (! wtop || ! wvbox || ! wfixed)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
795 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
796 if (wtop) gtk_widget_destroy (wtop);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
797 if (wvbox) gtk_widget_destroy (wvbox);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
798 if (wfixed) gtk_widget_destroy (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
799
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
800 UNBLOCK_INPUT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
801 return 0;
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
804 /* 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
805 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
806 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
807 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
808
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
809 /* 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
810 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
811 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
812
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
813 if (title) gtk_window_set_title (GTK_WINDOW (wtop), title);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
814
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
815 FRAME_GTK_OUTER_WIDGET (f) = wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
816 FRAME_GTK_WIDGET (f) = wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
817 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
818
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
819 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
820
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
821 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
822 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
823
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
824 if (FRAME_EXTERNAL_TOOL_BAR (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
825 update_frame_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
826
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
827 /* 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
828 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
829 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
830 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
831 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
832 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
833
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
834 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
835 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
836 SSDATA (Vx_resource_class));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
837
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
838 /* 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
839 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
840 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
841 G_CALLBACK (gtk_true), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
842
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
843 /* 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
844 and specify it.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
845 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
846 xg_set_geometry (f);
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
847 int grav = gtk_window_get_gravity (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
848 f->win_gravity = grav;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
849
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
850 gtk_widget_add_events (wfixed,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
851 GDK_POINTER_MOTION_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
852 | GDK_EXPOSURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
853 | GDK_BUTTON_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
854 | GDK_BUTTON_RELEASE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
855 | GDK_KEY_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
856 | GDK_ENTER_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
857 | GDK_LEAVE_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
858 | GDK_FOCUS_CHANGE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
859 | GDK_STRUCTURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
860 | GDK_VISIBILITY_NOTIFY_MASK);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
861
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
862 /* 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
863 by callers of this function. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
864 gtk_widget_realize (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
865 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
866
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
867 /* 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
868 we must keep X and GTK background in sync. */
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
869 xg_pix_to_gcolor (wfixed, FRAME_BACKGROUND_PIXEL (f), &bg);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
870 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
871
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
872 /* 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
873 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
874 of background color. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
875 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
876
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
877 /* 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
878 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
879 gtk_widget_modify_style (wfixed, style);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
880
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
881 /* GTK does not set any border, and they look bad with GTK. */
95954
184aae567806 * xfns.c (Fx_create_frame): internal-border-width default to 0 for Gtk.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95794
diff changeset
882 /* That they look bad is no excuse for imposing this here. --Stef
184aae567806 * xfns.c (Fx_create_frame): internal-border-width default to 0 for Gtk.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95794
diff changeset
883 It should be done by providing the proper default in Fx_create_Frame.
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
884 f->border_width = 0;
95954
184aae567806 * xfns.c (Fx_create_frame): internal-border-width default to 0 for Gtk.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95794
diff changeset
885 f->internal_border_width = 0; */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
886
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
887 UNBLOCK_INPUT;
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 return 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
890 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
891
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
892 /* 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
893 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
894 that the window now has.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
895 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
896 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
897
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
898 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
899 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
900 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
901 long flags;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
902 int user_position;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
903 {
98545
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
904 /* Don't set size hints during initialization; that apparently leads
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
905 to a race condition. See the thread at
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
906 http://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00033.html */
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
907 if (NILP (Vafter_init_time) || !FRAME_GTK_OUTER_WIDGET (f))
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
908 return;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
909
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
910 /* Must use GTK routines here, otherwise GTK resets the size hints
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
911 to its own defaults. */
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
912 GdkGeometry size_hints;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
913 gint hint_flags = 0;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
914 int base_width, base_height;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
915 int min_rows = 0, min_cols = 0;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
916 int win_gravity = f->win_gravity;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
917
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
918 if (flags)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
919 {
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
920 memset (&size_hints, 0, sizeof (size_hints));
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
921 f->output_data.x->size_hints = size_hints;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
922 f->output_data.x->hint_flags = hint_flags;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
923 }
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
924 else
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
925 flags = f->size_hint_flags;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
926
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
927 size_hints = f->output_data.x->size_hints;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
928 hint_flags = f->output_data.x->hint_flags;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
929
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
930 hint_flags |= GDK_HINT_RESIZE_INC | GDK_HINT_MIN_SIZE;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
931 size_hints.width_inc = FRAME_COLUMN_WIDTH (f);
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
932 size_hints.height_inc = FRAME_LINE_HEIGHT (f);
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
933
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
934 hint_flags |= GDK_HINT_BASE_SIZE;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
935 base_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
936 base_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
937 + FRAME_MENUBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f);
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
938
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
939 check_frame_size (f, &min_rows, &min_cols);
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
940
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
941 size_hints.base_width = base_width;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
942 size_hints.base_height = base_height;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
943 size_hints.min_width = base_width + min_cols * size_hints.width_inc;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
944 size_hints.min_height = base_height + min_rows * size_hints.height_inc;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
945
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
946 /* These currently have a one to one mapping with the X values, but I
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
947 don't think we should rely on that. */
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
948 hint_flags |= GDK_HINT_WIN_GRAVITY;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
949 size_hints.win_gravity = 0;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
950 if (win_gravity == NorthWestGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
951 size_hints.win_gravity = GDK_GRAVITY_NORTH_WEST;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
952 else if (win_gravity == NorthGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
953 size_hints.win_gravity = GDK_GRAVITY_NORTH;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
954 else if (win_gravity == NorthEastGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
955 size_hints.win_gravity = GDK_GRAVITY_NORTH_EAST;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
956 else if (win_gravity == WestGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
957 size_hints.win_gravity = GDK_GRAVITY_WEST;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
958 else if (win_gravity == CenterGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
959 size_hints.win_gravity = GDK_GRAVITY_CENTER;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
960 else if (win_gravity == EastGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
961 size_hints.win_gravity = GDK_GRAVITY_EAST;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
962 else if (win_gravity == SouthWestGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
963 size_hints.win_gravity = GDK_GRAVITY_SOUTH_WEST;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
964 else if (win_gravity == SouthGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
965 size_hints.win_gravity = GDK_GRAVITY_SOUTH;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
966 else if (win_gravity == SouthEastGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
967 size_hints.win_gravity = GDK_GRAVITY_SOUTH_EAST;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
968 else if (win_gravity == StaticGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
969 size_hints.win_gravity = GDK_GRAVITY_STATIC;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
970
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
971 if (flags & PPosition) hint_flags |= GDK_HINT_POS;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
972 if (flags & USPosition) hint_flags |= GDK_HINT_USER_POS;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
973 if (flags & USSize) hint_flags |= GDK_HINT_USER_SIZE;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
974
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
975 if (user_position)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
976 {
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
977 hint_flags &= ~GDK_HINT_POS;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
978 hint_flags |= GDK_HINT_USER_POS;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
979 }
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
980
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
981 if (hint_flags != f->output_data.x->hint_flags
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
982 || memcmp (&size_hints,
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
983 &f->output_data.x->size_hints,
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
984 sizeof (size_hints)) != 0)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
985 {
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
986 BLOCK_INPUT;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
987 gtk_window_set_geometry_hints (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
988 NULL, &size_hints, hint_flags);
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
989 f->output_data.x->size_hints = size_hints;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
990 f->output_data.x->hint_flags = hint_flags;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
991 UNBLOCK_INPUT;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
992 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
993 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
994
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
995 /* Change background color of a frame.
96363
f9d35151b907 American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents: 95954
diff changeset
996 Since GTK uses the background color to clear the window, we must
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
997 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
998 F is the frame to change,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
999 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
1000
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1001 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1002 xg_set_background_color (f, bg)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1003 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1004 unsigned long bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1005 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1006 if (FRAME_GTK_WIDGET (f))
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 GdkColor gdk_bg;
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 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1011 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
1012 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
1013 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1014 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1015 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1016
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1017
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1018 /* 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
1019 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
1020
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1021 void
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1022 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
1023 FRAME_PTR f;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1024 Pixmap icon_pixmap;
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1025 Pixmap icon_mask;
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 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
1028 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
1029 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
1030 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
1031
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1032 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
1033 }
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1034
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1035
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1036
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1037 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1038 Dialog functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1039 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1040 /* 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
1041 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
1042
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1043 static char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1044 get_dialog_title (char key)
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 char *title = "";
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1047
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1048 switch (key) {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1049 case 'E': case 'e':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1050 title = "Error";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1051 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1052
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1053 case 'I': case 'i':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1054 title = "Information";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1055 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1056
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1057 case 'L': case 'l':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1058 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1059 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1060
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1061 case 'P': case 'p':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1062 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1063 break;
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 case 'Q': case 'q':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1066 title = "Question";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1067 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1068 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1069
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1070 return title;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1071 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1072
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1073 /* 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
1074 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
1075 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
1076 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
1077 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
1078 W is the dialog widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1079 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
1080 user_data is NULL (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1081
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1082 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
1083
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1084 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1085 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
1086 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1087 GdkEvent *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1088 gpointer user_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1089 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1090 gtk_widget_unmap (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1091 return TRUE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1092 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1093
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1094 /* 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
1095 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
1096 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
1097 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
1098
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1099 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
1100
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1101 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1102 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
1103 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1104 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1105 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1106 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1107 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
1108 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
1109 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
1110 int left_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1111 int button_nr = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1112 int button_spacing = 10;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1113 GtkWidget *wdialog = gtk_dialog_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1114 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1115 GtkBox *cur_box;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1116 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1117 GtkWidget *whbox_up;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1118 GtkWidget *whbox_down;
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 /* 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
1121 instead. This looks better. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1122 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
1123
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1124 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
1125 left_buttons = total_buttons - right_buttons;
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 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
1128 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
1129
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1130 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
1131
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1132 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1133 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1134 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
1135 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
1136 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
1137
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1138 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
1139 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
1140 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
1141
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1142 cur_box = GTK_BOX (whbox_up);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1143 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1144
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1145 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
1146 G_CALLBACK (dialog_delete_callback), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1147
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1148 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1149 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1150 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
1151 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
1152 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1153
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1154 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
1155 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1156 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
1157 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1158 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1159
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
1160 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
1161 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1162 /* 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
1163 w = gtk_label_new (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1164 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
1165 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1166 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1167 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
1168 TRUE, TRUE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1169 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
1170
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1171 /* 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
1172 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
1173 gtk_widget_realize (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1174 gtk_widget_size_request (w, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1175 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
1176 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
1177 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
1178 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
1179 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1180 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1181 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1182 /* 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
1183 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
1184 if (! item->enabled)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1185 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1186 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1187 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
1188 select_cb, item->call_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1189
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1190 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
1191 if (++button_nr == left_buttons)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1192 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1193 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1194 cur_box = GTK_BOX (whbox_down);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1195 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1196 gtk_box_pack_start (cur_box,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1197 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1198 TRUE, TRUE,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1199 button_spacing);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1200 }
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 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
1204 g_free (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1205 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1206
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1207 return wdialog;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1208 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1209
105936
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1210 struct xg_dialog_data
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1211 {
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1212 GMainLoop *loop;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1213 int response;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1214 GtkWidget *w;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1215 guint timerid;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1216 };
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1217
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1218 /* Function that is called when the file or font dialogs pop down.
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1219 W is the dialog widget, RESPONSE is the response code.
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1220 USER_DATA is what we passed in to g_signal_connect. */
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1221
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1222 static void
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1223 xg_dialog_response_cb (w,
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1224 response,
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1225 user_data)
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1226 GtkDialog *w;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1227 gint response;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1228 gpointer user_data;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1229 {
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1230 struct xg_dialog_data *dd = (struct xg_dialog_data *)user_data;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1231 dd->response = response;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1232 g_main_loop_quit (dd->loop);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1233 }
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1234
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1235
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1236 /* Destroy the dialog. This makes it pop down. */
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1237
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1238 static Lisp_Object
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1239 pop_down_dialog (arg)
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1240 Lisp_Object arg;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1241 {
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1242 struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1243 struct xg_dialog_data *dd = (struct xg_dialog_data *) p->pointer;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1244
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1245 BLOCK_INPUT;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1246 if (dd->w) gtk_widget_destroy (dd->w);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1247 if (dd->timerid != 0) g_source_remove (dd->timerid);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1248
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1249 g_main_loop_quit (dd->loop);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1250 g_main_loop_unref (dd->loop);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1251
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1252 UNBLOCK_INPUT;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1253
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1254 return Qnil;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1255 }
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1256
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1257 /* If there are any emacs timers pending, add a timeout to main loop in DATA.
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1258 We pass in DATA as gpointer* so we can use this as a callback. */
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1259
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1260 static gboolean
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1261 xg_maybe_add_timer (data)
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1262 gpointer data;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1263 {
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1264 struct xg_dialog_data *dd = (struct xg_dialog_data *) data;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1265 EMACS_TIME next_time = timer_check (1);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1266 long secs = EMACS_SECS (next_time);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1267 long usecs = EMACS_USECS (next_time);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1268
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1269 dd->timerid = 0;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1270
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1271 if (secs >= 0 && usecs >= 0 && secs < ((guint)-1)/1000)
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1272 {
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1273 dd->timerid = g_timeout_add (secs * 1000 + usecs/1000,
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1274 xg_maybe_add_timer,
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1275 dd);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1276 }
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1277 return FALSE;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1278 }
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1279
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1280
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1281 /* Pops up a modal dialog W and waits for response.
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1282 We don't use gtk_dialog_run because we want to process emacs timers.
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1283 The dialog W is not destroyed when this function returns. */
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1284
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1285 static int
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1286 xg_dialog_run (f, w)
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1287 FRAME_PTR f;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1288 GtkWidget *w;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1289
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1290 {
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1291 int count = SPECPDL_INDEX ();
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1292 struct xg_dialog_data dd;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1293
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1294 xg_set_screen (w, f);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1295 gtk_window_set_transient_for (GTK_WINDOW (w),
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1296 GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1297 gtk_window_set_destroy_with_parent (GTK_WINDOW (w), TRUE);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1298 gtk_window_set_modal (GTK_WINDOW (w), TRUE);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1299
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1300 dd.loop = g_main_loop_new (NULL, FALSE);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1301 dd.response = GTK_RESPONSE_CANCEL;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1302 dd.w = w;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1303 dd.timerid = 0;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1304
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1305 g_signal_connect (G_OBJECT (w),
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1306 "response",
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1307 G_CALLBACK (xg_dialog_response_cb),
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1308 &dd);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1309 /* Don't destroy the widget if closed by the window manager close button. */
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1310 g_signal_connect (G_OBJECT (w), "delete-event", G_CALLBACK (gtk_true), NULL);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1311 gtk_widget_show (w);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1312
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1313 record_unwind_protect (pop_down_dialog, make_save_value (&dd, 0));
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1314
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1315 (void) xg_maybe_add_timer (&dd);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1316 g_main_loop_run (dd.loop);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1317
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1318 dd.w = 0;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1319 unbind_to (count, Qnil);
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1320
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1321 return dd.response;
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1322 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1323
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
1324
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1325 /***********************************************************************
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 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
1327 ***********************************************************************/
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1328 /* 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
1329 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
1330
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1331 int
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1332 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
1333 {
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1334 #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
1335 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
1336 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
1337 #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
1338
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1339 #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
1340 return 1;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1341 #else
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1342 return 0;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1343 #endif
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1344
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1345 #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
1346 }
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1347
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1348
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1349 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
1350
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 #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
1352
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1353 /* 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
1354 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
1355
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1356 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
1357 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
1358 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
1359 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1360 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
1361 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1362
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1363 /* 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
1364 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
1365
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1366 static void
67849
e30591b77191 Formatting
Jan Djärv <jan.h.d@swipnet.se>
parents: 67843
diff changeset
1367 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
1368 GtkWidget *widget;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1369 gpointer data;
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 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
1372 gboolean visible;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1373 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
1374 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
1375 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1376
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1377
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1378 /* 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
1379 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
1380 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
1381 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
1382 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
1383
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1384 static void
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1385 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
1386 GObject *gobject;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1387 GParamSpec *arg1;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1388 gpointer user_data;
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1389 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1390 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
1391
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1392 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
1393 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1394 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
1395 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
1396 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
1397
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1398 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
1399 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
1400
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1401 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
1402 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1403 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
1404 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
1405 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1406 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
1407 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
1408 (G_OBJECT (wtoggle),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1409 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
1410 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1411 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1412 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
1413 }
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1414 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1415
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
1416 /* 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
1417 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
1418 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
1419 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
1420 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
1421 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
1422 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
1423
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1424 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
1425
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1426 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
1427 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
1428 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
1429 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
1430 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
1431 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
1432 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
1433 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
1434 {
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1435 char message[1024];
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1436
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1437 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
1438 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
1439 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
1440 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
1441 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
1442 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
1443 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
1444
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
1445
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1446 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
1447 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
1448
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1449 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
1450 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
1451 (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
1452 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
1453 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
1454 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
1455 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
1456
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1457 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
1458 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
1459 wtoggle = gtk_check_button_new_with_label ("Show hidden files.");
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1460
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1461 if (x_gtk_show_hidden_files)
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1462 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1463 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
1464 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
1465 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1466 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
1467 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
1468 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
1469 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
1470 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
1471
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
1472 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
1473 {
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1474 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
1475 /* 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
1476 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
1477 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
1478 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
1479 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
1480 "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
1481 "use-file-dialog to turn it off.");
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1482
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1483 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
1484 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
1485 }
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1486
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1487 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
1488 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
1489 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
1490 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
1491
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
1492 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
1493 {
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1494 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
1495 struct gcpro gcpro1;
78781
415fda17ec8f (xg_get_file_with_chooser): Move GCPRO1 after declarations
Jan Djärv <jan.h.d@swipnet.se>
parents: 78762
diff changeset
1496 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
1497 GCPRO1 (file);
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1498
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
1499 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
1500
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
1501 /* 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
1502 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
1503 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
1504 file = Fexpand_file_name (file, Qnil);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1505
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
1506 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
1507 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
1508 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
1509 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
1510 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
1511 {
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1512 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
1513 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
1514 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
1515 {
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
1516 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
1517 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
1518 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
1519 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
1520 }
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
1521 }
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
1522
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1523 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
1524 }
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
1525
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1526 *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
1527 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
1528 }
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1529 #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
1530
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1531 #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
1532
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1533 /* 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
1534 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
1535
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1536 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
1537 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
1538 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1539 {
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 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
1541 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
1542 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1543
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 /* Create a file selection dialog.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1545 F is the current frame.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1546 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
1547 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
1548 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
1549 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
1550 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
1551
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1552 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
1553
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1554 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
1555 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
1556 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
1557 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1558 char *prompt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1559 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
1560 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
1561 xg_get_file_func *func;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1562 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1563 GtkWidget *filewin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1564 GtkFileSelection *filesel;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1565
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1566 filewin = gtk_file_selection_new (prompt);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1567 filesel = GTK_FILE_SELECTION (filewin);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1568
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1569 if (default_filename)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1570 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
1571
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1572 if (mustmatch_p)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1573 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1574 /* 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
1575 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
1576 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
1577 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1578
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1579 *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
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 return filewin;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1582 }
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
1583 #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
1584
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1585 /* 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
1586 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
1587 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
1588 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
1589 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
1590 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
1591 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
1592 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
1593 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
1594
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1595 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
1596 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
1597
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1598 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
1599 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
1600 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
1601 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
1602 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
1603 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
1604 {
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1605 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
1606 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
1607 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
1608 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
1609
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1610 #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
1611 /* 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
1612 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
1613 threads. */
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1614 sigblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1615 #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
1616
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
1617 #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
1618
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1619 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
1620 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
1621 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
1622 else
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1623 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
1624 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
1625
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1626 #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
1627
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1628 #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
1629 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
1630 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
1631 #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
1632 #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
1633 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
1634 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
1635 #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
1636
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1637 #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
1638
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1639 gtk_widget_set_name (w, "emacs-filedialog");
105936
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1640
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1641 filesel_done = xg_dialog_run (f, w);
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1642
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1643 #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
1644 sigunblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1645 #endif
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1646
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1647 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
1648 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
1649
105936
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1650 gtk_widget_destroy (w);
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1651 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
1652 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1653
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1654 #ifdef HAVE_FREETYPE
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1655 /* Pop up a GTK font selector and return the name of the font the user
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1656 selects, as a C string. The returned font name follows GTK's own
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1657 format:
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1658
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1659 `FAMILY [VALUE1 VALUE2] SIZE'
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1660
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1661 This can be parsed using font_parse_fcname in font.c.
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1662 DEFAULT_NAME, if non-zero, is the default font name. */
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1663
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1664 char *
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1665 xg_get_font_name (f, default_name)
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1666 FRAME_PTR f;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1667 char *default_name;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1668 {
105936
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1669 GtkWidget *w;
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1670 char *fontname = NULL;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1671 int done = 0;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1672
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1673 #if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN)
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1674 sigblock (sigmask (__SIGRTMIN));
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1675 #endif /* HAVE_GTK_AND_PTHREAD */
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1676
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1677 w = gtk_font_selection_dialog_new ("Pick a font");
105693
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
1678 if (!default_name)
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
1679 default_name = "Monospace 10";
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
1680 gtk_font_selection_dialog_set_font_name (GTK_FONT_SELECTION_DIALOG (w),
964ff7cbc8a6 Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105669
diff changeset
1681 default_name);
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1682
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1683 gtk_widget_set_name (w, "emacs-fontdialog");
105936
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1684
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1685 done = xg_dialog_run (f, w);
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1686
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1687 #if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN)
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1688 sigunblock (sigmask (__SIGRTMIN));
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1689 #endif
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1690
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1691 if (done == GTK_RESPONSE_OK)
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1692 fontname = gtk_font_selection_dialog_get_font_name
105936
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1693 (GTK_FONT_SELECTION_DIALOG (w));
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1694
45191c90be7e Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105880
diff changeset
1695 gtk_widget_destroy (w);
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1696 return fontname;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1697 }
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1698 #endif /* HAVE_FREETYPE */
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1699
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1700
49323
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 Menu functions.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1704 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1705
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
1706 /* The name of menu items that can be used for customization. Since GTK
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1707 RC files are very crude and primitive, we have to set this on all
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
1708 menu item names so a user can easily customize menu items. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1709
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1710 #define MENU_ITEM_NAME "emacs-menuitem"
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1713 /* 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
1714 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
1715 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
1716
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1717 /* 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
1718 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
1719 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
1720
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1721 /* 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
1722 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
1723 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
1724
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1725 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
1726 share the same structure, hence the reference count.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1727
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1728 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
1729 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
1730
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1731 static xg_menu_cb_data *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1732 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
1733 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1734 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1735 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1736 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1737 if (! cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1738 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1739 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
1740 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1741 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
1742 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
1743 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1744 cl_data->ref_count = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1745
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1746 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
1747 }
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 cl_data->ref_count++;
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 cl_data;
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 /* 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
1755 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
1756
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1757 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
1758 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
1759 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
1760 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
1761 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
1762 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
1763 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
1764
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1765 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1766 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
1767 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1768 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1769 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1770 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1771 if (cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1772 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1773 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1774 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
1775 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
1776 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1777 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1780 /* Decrease reference count for CL_DATA.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1781 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
1782
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1783 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1784 unref_cl_data (cl_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1785 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1786 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1787 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
1788 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1789 cl_data->ref_count--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1790 if (cl_data->ref_count == 0)
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 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
1793 xfree (cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1794 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1795 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1796 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1797
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1798 /* 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
1799
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1800 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1801 xg_mark_data ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1802 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1803 xg_list_node *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1804
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1805 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
1806 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
1807
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1808 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
1809 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1810 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
1811
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1812 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
1813 mark_object (cb_data->help);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1814 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1815 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1816
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1817
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1818 /* 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
1819 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
1820 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
1821
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1822 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1823 menuitem_destroy_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1824 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1825 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1826 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1827 if (client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1828 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1829 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
1830 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
1831 xfree (data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1832 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1833 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1834
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1835 /* 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
1836 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
1837 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
1838 CLIENT_DATA is not used.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1839
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1840 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
1841
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1842 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1843 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
1844 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1845 GdkEventCrossing *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1846 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1847 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1848 GdkEvent ev;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1849 GtkWidget *subwidget;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1850 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
1851
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1852 ev.crossing = *event;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1853 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
1854 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
1855 XG_ITEM_DATA);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1856 if (data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1857 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1858 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
1859 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1860 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
1861 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
1862 (*func) (subwidget, call_data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1863 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1864 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1865
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1866 return FALSE;
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1869 /* 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
1870 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
1871 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
1872
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1873 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1874 menu_destroy_callback (w, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1875 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1876 gpointer client_data;
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 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
1879 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1880
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1881 /* 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
1882 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
1883
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1884 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
1885
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1886 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1887 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
1888 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1889 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1890 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1891 GtkWidget *wlbl;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1892 GtkWidget *wkey;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1893 GtkWidget *wbox;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1894
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1895 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
1896 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
1897 wkey = gtk_label_new (utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1898
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1899 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
1900 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
1901
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1902 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
1903 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
1904
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1905 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
1906 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
1907 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
1908
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1909 return wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1910 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1911
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1912 /* 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
1913 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
1914 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
1915 ITEM is the widget_value describing the menu item.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1916
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1917 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
1918 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
1919 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
1920 *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
1921 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
1922
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1923 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
1924 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
1925
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1926 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1927 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
1928 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1929 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1930 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1931 GSList **group;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1932 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1933 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1934 GtkWidget *wtoadd = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1935
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
1936 /* 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
1937 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
1938 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
1939 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
1940 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
1941
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1942 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1943 wtoadd = make_widget_for_menu_item (utf8_label, utf8_key);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1944
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1945 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
1946 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1947 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1948 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
1949 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
1950 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
1951 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1952 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
1953 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1954 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
1955 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
1956 *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
1957 if (item->selected)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1958 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
1959 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1960 else
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 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1963 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
1964 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
1965 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1966
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1967 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
1968 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
1969
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1970 return w;
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
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
1973 /* 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
1974 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
1975
105959
ba3ffbd9c422 * process.c (ifflag_def): Make flag_sym constant.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105936
diff changeset
1976 static const char* separator_names[] = {
78787
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1977 "space",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1978 "no-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1979 "single-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1980 "double-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1981 "single-dashed-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1982 "double-dashed-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1983 "shadow-etched-in",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1984 "shadow-etched-out",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1985 "shadow-etched-in-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1986 "shadow-etched-out-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1987 "shadow-double-etched-in",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1988 "shadow-double-etched-out",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1989 "shadow-double-etched-in-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1990 "shadow-double-etched-out-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1991 0,
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1992 };
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
1993
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1994 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
1995 xg_separator_p (char *label)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1996 {
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
1997 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
1998 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
1999 && 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
2000 && 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
2001 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2002 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
2003
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2004 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
2005 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
2006 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
2007 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
2008 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2009 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
2010 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2011 /* 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
2012 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
2013 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
2014 ++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
2015 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
2016 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2017
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2018 return 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2019 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2020
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2021 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
2022
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2023 /* 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
2024
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2025 int
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2026 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
2027 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2028 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
2029 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2030
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2031 /* 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
2032 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
2033 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
2034 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
2035
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2036 static void
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2037 tearoff_remove (widget, client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2038 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2039 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2040 {
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2041 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
2042 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2043
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2044 /* 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
2045 xg_detached_menus count.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2046 WIDGET is the GtkTearoffMenuItem.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2047 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
2048
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2049 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2050 tearoff_activate (widget, client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2051 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2052 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2053 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2054 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
2055 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
2056 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2057 ++xg_detached_menus;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2058 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
2059 "destroy",
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2060 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
2061 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2062 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2063
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2064
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2065 /* 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
2066 ITEM decribes the menu item.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2067 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
2068 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
2069 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
2070 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
2071 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
2072 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
2073 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
2074 *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
2075 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
2076
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2077 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
2078
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2079 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2080 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
2081 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2082 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2083 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2084 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2085 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2086 GSList **group;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2087 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2088 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2089 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2090 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2091 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
2092
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2093 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
2094 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
2095
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2096 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
2097
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2098 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
2099 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
2100
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2101 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
2102
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2103 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
2104
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2105 cb_data->select_id = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2106 cb_data->help = item->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2107 cb_data->cl_data = cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2108 cb_data->call_data = item->call_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2109
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2110 g_signal_connect (G_OBJECT (w),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2111 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2112 G_CALLBACK (menuitem_destroy_callback),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2113 cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2114
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2115 /* 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
2116 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
2117
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2118 /* final item, not a submenu */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2119 if (item->call_data && ! item->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2120 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2121 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2122 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2123 = 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
2124 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2125
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2126 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2127 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2128
50112
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2129 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
2130 GCallback, GCallback, int, int, int,
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2131 GtkWidget *, xg_menu_cb_data *, char *));
50df9e41f1a3 Add prototype for create_menus.
Andreas Schwab <schwab@suse.de>
parents: 50108
diff changeset
2132
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2133 /* 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
2134 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
2135 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
2136 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
2137 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
2138 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
2139 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
2140 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
2141 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
2142 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
2143 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
2144 (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
2145 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
2146 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
2147 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
2148 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
2149
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2150 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
2151 not NULL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2152
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2153 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
2154
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2155 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2156 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
2157 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
2158 widget_value *data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2159 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2160 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2161 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2162 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2163 int pop_up_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2164 int menu_bar_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2165 int add_tearoff_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2166 GtkWidget *topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2167 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2168 char *name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2169 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2170 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2171 GtkWidget *wmenu = topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2172 GSList *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2173
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2174 if (! topmenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2175 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2176 if (! menu_bar_p)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2177 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2178 wmenu = gtk_menu_new ();
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2179 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
2180 /* 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
2181 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
2182 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
2183 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
2184 "enter-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2185 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
2186 NULL);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2187 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
2188 "leave-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2189 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
2190 NULL);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2191 }
105522
695dbf5b3bb9 gtkutil.c (create_menus): Call gtk_widget_set_size_request for
Jan Djärv <jan.h.d@swipnet.se>
parents: 103916
diff changeset
2192 else
695dbf5b3bb9 gtkutil.c (create_menus): Call gtk_widget_set_size_request for
Jan Djärv <jan.h.d@swipnet.se>
parents: 103916
diff changeset
2193 {
695dbf5b3bb9 gtkutil.c (create_menus): Call gtk_widget_set_size_request for
Jan Djärv <jan.h.d@swipnet.se>
parents: 103916
diff changeset
2194 wmenu = gtk_menu_bar_new ();
106186
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents: 106161
diff changeset
2195 /* Set width of menu bar to a small value so it doesn't enlarge
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents: 106161
diff changeset
2196 a small initial frame size. The width will be set to the
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents: 106161
diff changeset
2197 width of the frame later on when it is added to a container.
9b6f45dd8386 Use a select wrapper around the GLib event loop, thus taking into account GLib
Jan Djärv <jan.h.d@swipnet.se>
parents: 106161
diff changeset
2198 height -1: Natural height. */
105522
695dbf5b3bb9 gtkutil.c (create_menus): Call gtk_widget_set_size_request for
Jan Djärv <jan.h.d@swipnet.se>
parents: 103916
diff changeset
2199 gtk_widget_set_size_request (wmenu, 1, -1);
695dbf5b3bb9 gtkutil.c (create_menus): Call gtk_widget_set_size_request for
Jan Djärv <jan.h.d@swipnet.se>
parents: 103916
diff changeset
2200 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2201
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2202 /* 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
2203 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
2204 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
2205 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
2206 G_CALLBACK (menu_destroy_callback), cl_data);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2207
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2208 if (name)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2209 gtk_widget_set_name (wmenu, name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2210
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2211 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2212 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
2213 "selection-done", deactivate_cb, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2214 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2215
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2216 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
2217 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2218 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
2219 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
2220
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2221 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
2222 G_CALLBACK (tearoff_activate), 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2223 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2224
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2225 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
2226 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2227 GtkWidget *w;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2228
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2229 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
2230 && !xg_separator_p (item->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2231 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2232 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2233 /* 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
2234 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
2235 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2236 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
2237
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2238 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
2239 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
2240 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2241 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
2242 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2243 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
2244 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2245 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2246 /* GTK only have one separator type. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2247 w = gtk_separator_menu_item_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2248 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2249 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2250 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2251 w = xg_create_one_menuitem (item,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2252 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2253 item->contents ? 0 : select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2254 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2255 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2256 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2257
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2258 /* Create a possibly empty submenu for menu bar items, since some
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2259 themes don't highlight items correctly without it. */
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2260 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
2261 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2262 GtkWidget *submenu = create_menus (item->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2263 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2264 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2265 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2266 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2267 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2268 0,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2269 add_tearoff_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2270 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2271 cl_data,
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 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
2274 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2275 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2276
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2277 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
2278 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
2279 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2280
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2281 return wmenu;
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 /* 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
2285 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
2286 with some text and buttons.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2287 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
2288 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
2289 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
2290 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
2291 a dialog button is pressed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2292 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
2293 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
2294 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
2295 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
2296
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2297 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
2298
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2299 GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2300 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
2301 select_cb, deactivate_cb, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2302 char *type;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2303 char *name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2304 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2305 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2306 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2307 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2308 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2309 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2310 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
2311 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
2312 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
2313
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2314 if (strcmp (type, "dialog") == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2315 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2316 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
2317 xg_set_screen (w, f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2318 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
2319 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
2320 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
2321 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
2322 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
2323 }
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2324 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
2325 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2326 w = create_menus (val->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2327 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2328 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2329 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2330 highlight_cb,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2331 pop_up_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2332 menu_bar_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2333 menu_bar_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2334 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2335 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2336 name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2337
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2338 /* 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
2339 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
2340 if (pop_up_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2341 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2342 /* 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
2343 gtk_widget_realize (w);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2344 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
2345 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2346 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2347 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2348 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2349 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
2350 type);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2351 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2352
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2353 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2354 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2355
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
2356 /* 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
2357
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2358 static const char *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2359 xg_get_menu_item_label (witem)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2360 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2361 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2362 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
2363 return gtk_label_get_label (wlabel);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2364 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2365
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
2366 /* 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
2367
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2368 static int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2369 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
2370 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2371 char *label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2372 {
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
2373 int is_same = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2374 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
2375 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
2376
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2377 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
2378 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
2379 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
2380 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
2381
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2382 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
2383
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2384 return is_same;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2385 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2386
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2387 /* 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
2388
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2389 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
2390 xg_destroy_widgets (list)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2391 GList *list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2392 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2393 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2394
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2395 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
2396 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2397 GtkWidget *w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2398
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2399 /* 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
2400 gtk_widget_destroy (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2401 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2402 }
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 /* 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
2405 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
2406 *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
2407 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
2408 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
2409 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
2410 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
2411 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
2412 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
2413
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2414 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
2415
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2416 static void
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2417 xg_update_menubar (menubar, f, list, iter, pos, val,
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2418 select_cb, deactivate_cb, highlight_cb, cl_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2419 GtkWidget *menubar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2420 FRAME_PTR f;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2421 GList **list;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2422 GList *iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2423 int pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2424 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2425 GCallback select_cb;
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2426 GCallback deactivate_cb;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2427 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2428 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2429 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2430 if (! iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2431 return;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2432 else if (iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2433 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2434 /* 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
2435 xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2436
106161
0ea716305b13 gtkutil.c (xg_modify_menubar_widgets): If menubar is totally empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 106012
diff changeset
2437 /* Add a blank entry so the menubar doesn't collapse to nothing. */
0ea716305b13 gtkutil.c (xg_modify_menubar_widgets): If menubar is totally empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 106012
diff changeset
2438 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar),
0ea716305b13 gtkutil.c (xg_modify_menubar_widgets): If menubar is totally empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 106012
diff changeset
2439 gtk_menu_item_new_with_label (""),
0ea716305b13 gtkutil.c (xg_modify_menubar_widgets): If menubar is totally empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 106012
diff changeset
2440 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2441 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2442 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2443 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2444 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2445 else if (! iter && val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2446 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2447 /* Item(s) added. Add all new items in one call. */
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2448 create_menus (val, f, select_cb, deactivate_cb, highlight_cb,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2449 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
2450
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2451 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2452 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2453 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2454 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2455 /* Below this neither iter or val is NULL */
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2456 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
2457 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2458 /* 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
2459 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2460 iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2461 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2462 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2463 else /* This item is changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2464 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2465 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
2466 GtkMenuItem *witem2 = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2467 int val_in_menubar = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2468 int iter_in_new_menubar = 0;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2469 GList *iter2;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2470 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2471
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2472 /* 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
2473 for (iter2 = iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2474 iter2 && ! val_in_menubar;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2475 iter2 = g_list_next (iter2))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2476 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2477 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
2478 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
2479 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2480
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2481 /* 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
2482 specification for the new menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2483 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
2484 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
2485
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2486 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
2487 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2488 int nr = pos;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2489
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2490 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2491 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2492 New: A C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2493 Remove B. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2494
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2495 gtk_widget_ref (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2496 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
2497 gtk_widget_destroy (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2498
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2499 /* 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
2500 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2501 *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
2502 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
2503 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2504 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
2505 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2506 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2507 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2508 New: A X C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2509 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
2510 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
2511 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
2512 (corresponds to B above).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2513 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
2514 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
2515 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
2516 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
2517 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
2518 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
2519 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
2520 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
2521 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
2522 GtkWidget *submenu = gtk_menu_item_get_submenu (witem);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2523
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
2524 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
2525
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2526 /* 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
2527 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
2528 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
2529 /* 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
2530 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
2531
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2532 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2533 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2534 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2535 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2536 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
2537 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2538 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2539 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2540 New: A X B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2541 Insert X. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2542
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2543 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2544 GList *group = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2545 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
2546 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2547 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2548 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2549 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2550 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2551
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2552 /* Create a possibly empty submenu for menu bar items, since some
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2553 themes don't highlight items correctly without it. */
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2554 GtkWidget *submenu = create_menus (NULL, f,
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2555 select_cb, deactivate_cb,
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2556 highlight_cb,
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2557 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
2558 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
2559 gtk_menu_shell_insert (GTK_MENU_SHELL (menubar), w, pos);
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2560 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
2561
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2562 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2563 *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
2564 while (nr-- > 0) iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2565 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2566 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2567 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2568 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2569 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
2570 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2571 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2572 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2573 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2574 New: A C B
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2575 Move C before B */
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 gtk_widget_ref (GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2578 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
2579 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
2580 GTK_WIDGET (witem2), pos);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2581 gtk_widget_unref (GTK_WIDGET (witem2));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2582
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2583 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2584 *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
2585 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
2586 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
2587 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2588 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2589 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2590 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2591
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2592 /* Update the rest of the menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2593 xg_update_menubar (menubar, f, list, iter, pos, val,
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2594 select_cb, deactivate_cb, highlight_cb, cl_data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2595 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2596
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2597 /* 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
2598 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
2599 HIGHLIGHT_CB is the callback to call when entering/leaving menu items.
102358
07bc423d78f1 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 102283
diff changeset
2600 CL_DATA is the data to set in the widget for menu invocation. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2601
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2602 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2603 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
2604 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2605 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2606 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2607 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2608 xg_menu_cb_data *cl_data;
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 GtkWidget *wchild;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2611 GtkLabel *wlbl = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2612 GtkLabel *wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2613 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2614 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
2615 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
2616 const char *old_key = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2617 xg_menu_item_cb_data *cb_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2618
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2619 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
2620 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
2621 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
2622
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2623 /* 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
2624 if (GTK_IS_HBOX (wchild))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2625 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2626 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
2627
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2628 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2629 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2630 g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2631
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2632 if (! utf8_key)
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 /* 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
2635 gtk_widget_ref (GTK_WIDGET (wlbl));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2636 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
2637 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
2638 wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2639 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2640
49323
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 else /* Just a label. */
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 wlbl = GTK_LABEL (wchild);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2645
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2646 /* 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
2647 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2648 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2649 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
2650 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
2651
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2652 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2653 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2654 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2655
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2656 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
2657 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
2658 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2659 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2660
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2661
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
2662 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
2663 if (wlbl) old_label = gtk_label_get_label (wlbl);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2664
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
2665 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
2666 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
2667
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
2668 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
2669 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
2670
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
2671 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
2672 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
2673
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2674 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
2675 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2676 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
2677 gtk_widget_set_sensitive (w, TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2678
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2679 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
2680 XG_ITEM_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2681 if (cb_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2682 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2683 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
2684 cb_data->help = val->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2685 cb_data->cl_data = cl_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2686
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2687 /* 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
2688 if (val->call_data && ! val->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2689 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2690 /* 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
2691 if (! cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2692 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2693 = 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
2694 select_cb, cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2695 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2696 else if (cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2697 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2698 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
2699 cb_data->select_id = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2700 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2704 /* 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
2705
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2706 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2707 xg_update_toggle_item (val, w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2708 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2709 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2710 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2711 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
2712 }
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 /* 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
2715
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2716 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2717 xg_update_radio_item (val, w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2718 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2719 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2720 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2721 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
2722 }
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 /* 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
2725 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
2726 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
2727 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
2728 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
2729 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
2730 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
2731 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
2732
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2733 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
2734 was NULL. */
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 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2737 xg_update_submenu (submenu, f, val,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2738 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
2739 GtkWidget *submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2740 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2741 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2742 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2743 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2744 GCallback highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2745 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2746 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2747 GtkWidget *newsub = submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2748 GList *list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2749 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2750 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2751 int has_tearoff_p = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2752 GList *first_radio = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2753
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2754 if (submenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2755 list = gtk_container_get_children (GTK_CONTAINER (submenu));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2756
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2757 for (cur = val, iter = list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2758 cur && iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2759 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
2760 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2761 GtkWidget *w = GTK_WIDGET (iter->data);
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 /* 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
2764 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
2765 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2766 has_tearoff_p = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2767 iter = g_list_next (iter);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2768 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
2769 else break;
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2772 /* 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
2773 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
2774 in GTK becomes correct. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2775 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
2776 first_radio = iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2777 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
2778 && ! GTK_IS_RADIO_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2779 first_radio = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2780
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2781 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
2782 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2783 if (! xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2784 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2785 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2786 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
2787 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2788 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
2789 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2790 xg_update_toggle_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2791 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
2792 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2793 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
2794 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2795 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
2796 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2797 xg_update_radio_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2798 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
2799 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2800 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
2801 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2802 GtkMenuItem *witem = GTK_MENU_ITEM (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2803 GtkWidget *sub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2804
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2805 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
2806 xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2807 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2808
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2809 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
2810
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2811 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
2812 if (sub && ! cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2813 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2814 /* Not a submenu anymore. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2815 gtk_widget_ref (sub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2816 gtk_menu_item_remove_submenu (witem);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2817 gtk_widget_destroy (sub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2818 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2819 else if (cur->contents)
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 GtkWidget *nsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2822
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2823 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
2824 select_cb, deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2825 highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2826
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2827 /* 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
2828 if (nsub != sub)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2829 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
2830 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2831 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2832 else
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 /* 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
2835 in SUBMENU. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2836 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2837 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2838 }
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 /* Remove widgets from first structual change. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2841 if (iter)
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 /* 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
2844 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
2845 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
2846 else xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2847 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2848
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2849 if (cur)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2850 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2851 /* More items added. Create them. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2852 newsub = create_menus (cur,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2853 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2854 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2855 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2856 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2857 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2858 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2859 ! has_tearoff_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2860 submenu,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2861 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2862 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2863 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2864
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2865 if (list) g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2866
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2867 return newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2868 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2869
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2870 /* Update the MENUBAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2871 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
2872 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
2873 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
2874 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
2875 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
2876 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
2877 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
2878
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2879 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2880 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
2881 select_cb, deactivate_cb, highlight_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2882 GtkWidget *menubar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2883 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2884 widget_value *val;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2885 int deep_p;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2886 GCallback select_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2887 GCallback deactivate_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2888 GCallback highlight_cb;
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 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2891 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
2892
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2893 if (! list) return;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2894
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2895 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
2896 XG_FRAME_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2897
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2898 xg_update_menubar (menubar, f, &list, list, 0, val->contents,
96971
8a07ea5be91d (xg_get_font_name): Cast w to GTK_FONT_SELECTION_DIALOG.
Jan Djärv <jan.h.d@swipnet.se>
parents: 96774
diff changeset
2899 select_cb, deactivate_cb, highlight_cb, cl_data);
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2900
64783
0975467abc17 * gtkutil.c (xg_modify_menubar_widgets): Remove semicolon that
Jan Djärv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
2901 if (deep_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2902 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2903 widget_value *cur;
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 /* 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
2906 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
2907 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
2908
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2909 /* 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
2910 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
2911
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2912 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
2913 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2914 GList *iter;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2915 GtkWidget *sub = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2916 GtkWidget *newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2917 GtkMenuItem *witem;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2918
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2919 /* 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
2920 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
2921 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2922 witem = GTK_MENU_ITEM (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2923 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
2924 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2925 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
2926 break;
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 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2929
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2930 newsub = xg_update_submenu (sub,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2931 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2932 cur->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2933 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2934 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2935 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2936 cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2937 /* 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
2938 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
2939 newly created sub menu under witem. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2940 if (newsub != sub)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2941 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2942 xg_set_screen (newsub, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2943 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
2944 }
49323
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
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2948 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2949 gtk_widget_show_all (menubar);
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 /* 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
2953 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
2954
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2955 int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2956 xg_update_frame_menubar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2957 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2958 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2959 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
2960 GtkRequisition req;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2961
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2962 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
2963 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2964
106012
fae53e3bfda0 gtkutil.c (xg_update_frame_menubar): Do nothing if menubar already has a parent.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105959
diff changeset
2965 if (x->menubar_widget && gtk_widget_get_parent (x->menubar_widget))
fae53e3bfda0 gtkutil.c (xg_update_frame_menubar): Do nothing if menubar already has a parent.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105959
diff changeset
2966 return 0; /* Already done this, happens for frames created invisible. */
fae53e3bfda0 gtkutil.c (xg_update_frame_menubar): Do nothing if menubar already has a parent.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105959
diff changeset
2967
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2968 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2969
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2970 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
2971 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2972 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
2973
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2974 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
2975 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
2976 FRAME_MENUBAR_HEIGHT (f) = req.height;
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
2977 xg_height_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2978 UNBLOCK_INPUT;
50106
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
2979
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
2980 return 1;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2981 }
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 /* 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
2984 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
2985
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2986 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2987 free_frame_menubar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2988 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2989 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2990 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
2991
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2992 if (x->menubar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2993 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2994 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2995
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2996 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
2997 /* 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
2998 the container. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2999 x->menubar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3000 FRAME_MENUBAR_HEIGHT (f) = 0;
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
3001 xg_height_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3002 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3003 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3004 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3008 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3009 Scroll bar functions
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3012
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3013 /* 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
3014 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
3015
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3016 int xg_ignore_gtk_scrollbar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3017
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3018 /* Xlib's `Window' fits in 32 bits. But we want to store pointers, and they
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3019 may be larger than 32 bits. Keep a mapping from integer index to widget
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3020 pointers to get around the 32 bit limitation. */
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3021
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3022 static struct
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 GtkWidget **widgets;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3025 int max_size;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3026 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
3027 } id_to_widget;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3028
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3029 /* 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
3030
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3031 #define ID_TO_WIDGET_INCR 32
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3032
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3033 /* 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
3034
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3035 static int
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3036 xg_store_widget_in_map (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3037 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3038 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3039 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3040
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3041 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
3042 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3043 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
3044
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3045 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
3046 sizeof (GtkWidget *)*new_size);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3047
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3048 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
3049 id_to_widget.widgets[i] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3050 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
3051 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3052
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3053 /* 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
3054 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
3055 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
3056 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
3057 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3058 if (! id_to_widget.widgets[i])
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3059 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3060 id_to_widget.widgets[i] = w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3061 ++id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3062
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3063 return i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3064 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3065 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3066
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3067 /* Should never end up here */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3068 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3069 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3070
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3071 /* 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
3072 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
3073
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3074 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3075 xg_remove_widget_from_map (idx)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3076 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3077 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3078 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
3079 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3080 id_to_widget.widgets[idx] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3081 --id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3082 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3085 /* 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
3086
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3087 static GtkWidget *
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3088 xg_get_widget_from_map (idx)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3089 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3090 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3091 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
3092 return id_to_widget.widgets[idx];
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3093
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3094 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3095 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3096
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3097 /* 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
3098 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
3099
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3100 int
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3101 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
3102 Display *dpy;
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3103 Window wid;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3104 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3105 int idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3106 GtkWidget *w;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3107
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3108 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
3109
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3110 if (w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3111 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3112 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
3113 if (id_to_widget.widgets[idx] == w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3114 return idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3115 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3116
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3117 return -1;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3118 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3119
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3120 /* 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
3121 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
3122 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
3123
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3124 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3125 xg_gtk_scroll_destroy (widget, data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3126 GtkWidget *widget;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3127 gpointer data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3128 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3129 int id = (int) (EMACS_INT) data; /* 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
3130 xg_remove_widget_from_map (id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3131 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3132
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3133 /* 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
3134 in BAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3135 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
3136 bar changes.
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3137 END_CALLBACK is the callback to invoke when scrolling ends.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3138 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
3139 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
3140
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3141 void
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3142 xg_create_scroll_bar (f, bar, scroll_callback, end_callback, scroll_bar_name)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3143 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3144 struct scroll_bar *bar;
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3145 GCallback scroll_callback, end_callback;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3146 char *scroll_bar_name;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3147 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3148 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
3149 GtkWidget *webox;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3150 GtkObject *vadj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3151 int scroll_id;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3152
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3153 /* 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
3154 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
3155 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
3156 0.1, 0.1, 0.1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3157
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3158 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
3159 webox = gtk_event_box_new ();
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3160 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
3161 gtk_range_set_update_policy (GTK_RANGE (wscroll), GTK_UPDATE_CONTINUOUS);
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3162 g_object_set_data (G_OBJECT (wscroll), XG_FRAME_DATA, (gpointer)f);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3163
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3164 scroll_id = xg_store_widget_in_map (wscroll);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3165
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3166 /* 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
3167 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3168 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3169 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
3170 (gpointer) (EMACS_INT) scroll_id);
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3171 g_signal_connect (G_OBJECT (wscroll),
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3172 "change-value",
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3173 scroll_callback,
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3174 (gpointer) bar);
106549
3acd32c3e0ac gtkutil.c: Scroll bar thumb not updated properly (bug #5177).
Jan Djärv <jan.h.d@swipnet.se>
parents: 106512
diff changeset
3175 g_signal_connect (G_OBJECT (wscroll),
3acd32c3e0ac gtkutil.c: Scroll bar thumb not updated properly (bug #5177).
Jan Djärv <jan.h.d@swipnet.se>
parents: 106512
diff changeset
3176 "button-release-event",
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3177 end_callback,
106549
3acd32c3e0ac gtkutil.c: Scroll bar thumb not updated properly (bug #5177).
Jan Djärv <jan.h.d@swipnet.se>
parents: 106512
diff changeset
3178 (gpointer) bar);
3acd32c3e0ac gtkutil.c: Scroll bar thumb not updated properly (bug #5177).
Jan Djärv <jan.h.d@swipnet.se>
parents: 106512
diff changeset
3179
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3180 /* 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
3181 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
3182 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
3183 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
3184 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
3185 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
3186 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
3187 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
3188
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3189
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3190 /* 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
3191 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
3192
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3193 bar->x_window = scroll_id;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3194 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3195
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3196 /* 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
3197
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3198 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3199 xg_show_scroll_bar (scrollbar_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3200 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3201 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3202 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
3203 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
3204 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
3205 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3206
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3207 /* 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
3208
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3209 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3210 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
3211 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3212 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3213 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3214 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
3215 if (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3216 {
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3217 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
3218 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
3219 gtk_widget_destroy (wparent);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3220 SET_FRAME_GARBAGED (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3221 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3222 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3223
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3224 /* 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
3225 in frame F.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3226 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
3227 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
3228
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3229 void
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3230 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
3231 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3232 int scrollbar_id;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3233 int top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3234 int left;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3235 int width;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3236 int height;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3237 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3238
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3239 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
3240
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3241 if (wscroll)
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3242 {
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
3243 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
3244 GtkWidget *wparent = gtk_widget_get_parent (wscroll);
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3245 GtkFixed *wf = GTK_FIXED (wfixed);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3246
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3247 /* Clear out old position. */
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3248 GList *iter;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3249 int oldx = -1, oldy = -1, oldw, oldh;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3250 for (iter = wf->children; iter; iter = iter->next)
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3251 if (((GtkFixedChild *)iter->data)->widget == wparent)
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3252 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3253 GtkFixedChild *ch = (GtkFixedChild *)iter->data;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3254 if (ch->x != left || ch->y != top)
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3255 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3256 oldx = ch->x;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3257 oldy = ch->y;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3258 gtk_widget_get_size_request (wscroll, &oldw, &oldh);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3259 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3260 break;
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3261 }
55342
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3262
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3263 /* 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
3264 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
3265 gtk_widget_set_size_request (wscroll, width, height);
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3266 gtk_widget_queue_draw (wfixed);
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
3267 gdk_window_process_all_updates ();
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3268 if (oldx != -1)
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3269 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3270 /* Clear under old scroll bar position. This must be done after
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3271 the gtk_widget_queue_draw and gdk_window_process_all_updates
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3272 above. */
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3273 x_clear_area (FRAME_X_DISPLAY (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3274 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3275 oldx, oldy, oldw, oldh, 0);
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3276 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3277
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
3278 /* 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
3279 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
3280 here to get some events. */
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3281
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
3282 x_sync (f);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3283 SET_FRAME_GARBAGED (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3284 cancel_mouse_face (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3285 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3286 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3287
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3288 /* 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
3289 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
3290
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3291 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3292 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
3293 struct scroll_bar *bar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3294 int portion, position, whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3295 {
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3296 GtkWidget *wscroll = xg_get_widget_from_map (bar->x_window);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3297
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3298 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
3299
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
3300 if (wscroll && NILP (bar->dragging))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3301 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3302 GtkAdjustment *adj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3303 gdouble shown;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3304 gdouble top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3305 int size, value;
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3306 int new_step;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3307 int changed = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3308
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3309 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
3310
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
3311 /* 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
3312 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
3313 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
3314 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
3315 /* 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
3316 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
3317 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
3318
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3319 if (whole <= 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3320 top = 0, shown = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3321 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3322 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3323 top = (gdouble) position / whole;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3324 shown = (gdouble) portion / whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3325 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3326
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3327 size = shown * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3328 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
3329 size = max (size, 1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3330
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3331 value = top * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3332 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
3333 value = max (value, XG_SB_MIN);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3334
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3335 /* 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
3336 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
3337
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
3338 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
3339 || (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
3340 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3341 adj->page_size = size;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3342 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
3343 /* 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
3344 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
3345 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
3346 }
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
3347
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3348 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
3349 {
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3350 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
3351
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3352 BLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3353
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3354 /* 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
3355 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
3356 xg_ignore_gtk_scrollbar = 1;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3357
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3358 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
3359 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
3360 else if (changed)
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3361 gtk_adjustment_changed (adj);
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3362
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3363 xg_ignore_gtk_scrollbar = 0;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3364
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3365 UNBLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3366 }
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 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3369
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3370 /* Return non-zero if EVENT is for a scroll bar in frame F.
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3371 When the same X window is used for several Gtk+ widgets, we cannot
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3372 say for sure based on the X window alone if an event is for the
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3373 frame. This function does additional checks.
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3374
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3375 Return non-zero if the event is for a scroll bar, zero otherwise. */
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3376
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3377 int
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3378 xg_event_is_for_scrollbar (f, event)
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3379 FRAME_PTR f;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3380 XEvent *event;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3381 {
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3382 int retval = 0;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3383
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3384 if (f && event->type == ButtonPress && event->xbutton.button < 4)
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3385 {
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3386 /* Check if press occurred outside the edit widget. */
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3387 GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3388 retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL)
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3389 != f->output_data.x->edit_widget->window;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3390 }
106559
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3391 else if (f
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3392 && ((event->type == ButtonRelease && event->xbutton.button < 4)
bac7488df503 Bug 5177: Scroll bar thumb did not move when scrolling with mouse wheel.
Jan Djärv <jan.h.d@swipnet.se>
parents: 106549
diff changeset
3393 || event->type == MotionNotify))
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3394 {
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3395 /* If we are releasing or moving the scroll bar, it has the grab. */
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3396 retval = gtk_grab_get_current () != 0
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3397 && gtk_grab_get_current () != f->output_data.x->edit_widget;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3398 }
106549
3acd32c3e0ac gtkutil.c: Scroll bar thumb not updated properly (bug #5177).
Jan Djärv <jan.h.d@swipnet.se>
parents: 106512
diff changeset
3399
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3400 return retval;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3401 }
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3402
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3403
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3404
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3405 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3406 Tool bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3407 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3408 /* 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
3409 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
3410 the GtkImage with a new image. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3411 #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
3412
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3413 /* 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
3414 get them. */
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3415 #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
3416
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3417 /* 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
3418 #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
3419
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3420 /* The key for the data we put in the GtkImage widgets. The data is
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3421 the stock name used by Emacs. We use this to see if we need to update
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3422 the GtkImage with a new image. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3423 #define XG_TOOL_BAR_STOCK_NAME "emacs-tool-bar-stock-name"
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3424
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3425 /* As above, but this is used for named theme widgets, as opposed to
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3426 stock items. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3427 #define XG_TOOL_BAR_ICON_NAME "emacs-tool-bar-icon-name"
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3428
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3429 /* Callback function invoked when a tool bar item is pressed.
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3430 W is the button widget in the tool bar that got pressed,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3431 CLIENT_DATA is an integer that is the index of the button in the
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3432 tool bar. 0 is the first button. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3433
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3434 static gboolean
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3435 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
3436 GtkWidget *widget;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3437 GdkEventButton *event;
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3438 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
3439 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3440 /* 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
3441 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
3442 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
3443 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
3444 }
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3445
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3446
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3447 /* 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
3448 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
3449 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
3450 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
3451
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3452 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3453 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
3454 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3455 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3456 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3457 /* 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
3458 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
3459 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
3460 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
3461
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3462 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
3463 Lisp_Object key, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3464 struct input_event event;
51569
e7bd8581e306 (xg_tool_bar_callback): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51432
diff changeset
3465 EVENT_INIT (event);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3466
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3467 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
3468 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3469
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3470 idx *= TOOL_BAR_ITEM_NSLOTS;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3471
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3472 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
3473 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
3474
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3475 /* 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
3476 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
3477 event.kind = TOOL_BAR_EVENT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3478 event.frame_or_window = frame;
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3479 event.arg = frame;
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3480 kbd_buffer_store_event (&event);
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3481
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3482 event.kind = TOOL_BAR_EVENT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3483 event.frame_or_window = frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3484 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
3485 /* Convert between the modifier bits GDK uses and the modifier bits
102549
f737bc68655e * gtkutil.c (xg_tool_bar_callback): Set focus back to the frame
Jan Djärv <jan.h.d@swipnet.se>
parents: 102358
diff changeset
3486 Emacs uses. This assumes GDK and X masks are the same, which they are when
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3487 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
3488 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
3489 kbd_buffer_store_event (&event);
102549
f737bc68655e * gtkutil.c (xg_tool_bar_callback): Set focus back to the frame
Jan Djärv <jan.h.d@swipnet.se>
parents: 102358
diff changeset
3490
f737bc68655e * gtkutil.c (xg_tool_bar_callback): Set focus back to the frame
Jan Djärv <jan.h.d@swipnet.se>
parents: 102358
diff changeset
3491 /* Return focus to the frame after we have clicked on a detached
f737bc68655e * gtkutil.c (xg_tool_bar_callback): Set focus back to the frame
Jan Djärv <jan.h.d@swipnet.se>
parents: 102358
diff changeset
3492 tool bar button. */
f737bc68655e * gtkutil.c (xg_tool_bar_callback): Set focus back to the frame
Jan Djärv <jan.h.d@swipnet.se>
parents: 102358
diff changeset
3493 Fx_focus_frame (frame);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3494 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3495
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3496 /* 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
3497 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
3498 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
3499 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
3500 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
3501 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
3502
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3503 static void
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3504 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
3505 GtkWidget *w;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3506 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
3507 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3508 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
3509 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
3510 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
3511 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3512
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3513
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3514 static gboolean
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3515 xg_tool_bar_help_callback P_ ((GtkWidget *w,
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3516 GdkEventCrossing *event,
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3517 gpointer client_data));
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3518
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3519 /* This callback is called when a help is to be shown for an item in
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3520 the detached tool bar when the detached tool bar it is not expanded. */
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3521
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3522 static gboolean
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3523 xg_tool_bar_proxy_help_callback (w, event, client_data)
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3524 GtkWidget *w;
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3525 GdkEventCrossing *event;
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3526 gpointer client_data;
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3527 {
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3528 GtkWidget *wbutton = GTK_WIDGET (g_object_get_data (G_OBJECT (w),
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3529 XG_TOOL_BAR_PROXY_BUTTON));
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3530
106512
471e6932ea09 (xg_tool_bar_proxy_help_callback): Fix missing return.
Andreas Schwab <schwab@linux-m68k.org>
parents: 106186
diff changeset
3531 return xg_tool_bar_help_callback (wbutton, event, client_data);
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3532 }
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3533
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3534
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3535 /* 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
3536 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
3537 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
3538 blank. */
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3539
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3540 static gboolean
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3541 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
3542 GtkToolItem *toolitem;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3543 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
3544 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3545 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
3546 GtkButton *wbutton = GTK_BUTTON (gtk_bin_get_child (GTK_BIN (weventbox)));
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3547 GtkWidget *wmenuitem = gtk_image_menu_item_new_with_label ("");
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3548 GtkWidget *wmenuimage;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3549
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3550 if (gtk_button_get_use_stock (wbutton))
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3551 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
3552 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
3553 else
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3554 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3555 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
3556 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
3557 GtkImageType store_type = gtk_image_get_storage_type (wimage);
85938
d7e05ac913d8 (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 84621
diff changeset
3558
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3559 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
3560 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3561 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
3562 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
3563 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
3564 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3565 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
3566 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3567 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
3568 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
3569 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
3570 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
3571 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3572 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
3573 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3574 gint width, height;
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3575
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3576 if (settings &&
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3577 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
3578 &width, &height))
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3579 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3580 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
3581
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3582 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
3583 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
3584 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
3585
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3586 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
3587 }
79340
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3588 else
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3589 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3590 fprintf (stderr, "internal error: GTK_IMAGE_PIXBUF failed\n");
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3591 abort ();
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3592 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3593 }
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3594 else if (store_type == GTK_IMAGE_ICON_NAME)
79340
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3595 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3596 const gchar *icon_name;
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3597 GtkIconSize icon_size;
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3598
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3599 gtk_image_get_icon_name (wimage, &icon_name, &icon_size);
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3600 wmenuimage = gtk_image_new_from_icon_name (icon_name,
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3601 GTK_ICON_SIZE_MENU);
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3602 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3603 else
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3604 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3605 fprintf (stderr, "internal error: store_type is %d\n", store_type);
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3606 abort ();
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3607 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3608 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3609 if (wmenuimage)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3610 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
3611
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3612 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
3613 "activate",
103022
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
3614 G_CALLBACK (xg_tool_bar_proxy_callback),
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3615 user_data);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3616
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3617
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3618 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
3619 (gpointer) wbutton);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3620 gtk_tool_item_set_proxy_menu_item (toolitem, "Emacs toolbar item", wmenuitem);
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3621 gtk_widget_set_sensitive (wmenuitem, GTK_WIDGET_SENSITIVE (wbutton));
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3622
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3623 /* Use enter/leave notify to show help. We use the events
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3624 rather than the GtkButton specific signals "enter" and
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3625 "leave", so we can have only one callback. The event
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3626 will tell us what kind of event it is. */
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3627 g_signal_connect (G_OBJECT (wmenuitem),
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3628 "enter-notify-event",
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3629 G_CALLBACK (xg_tool_bar_proxy_help_callback),
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3630 user_data);
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3631 g_signal_connect (G_OBJECT (wmenuitem),
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3632 "leave-notify-event",
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3633 G_CALLBACK (xg_tool_bar_proxy_help_callback),
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3634 user_data);
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3635
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3636 return TRUE;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3637 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3638
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3639 /* 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
3640 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
3641 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3642 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
3643 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3644 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
3645
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3646 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3647 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
3648 GtkHandleBox *wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3649 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3650 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3651 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3652 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
3653 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
3654
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
3655 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
3656 NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3657
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3658 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3659 {
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3660 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
3661
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3662 /* 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
3663 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
3664 place. */
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
3665 FRAME_TOOLBAR_HEIGHT (f) = 4;
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
3666 xg_height_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3667 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3668 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3669
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3670 /* 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
3671 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
3672 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3673 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
3674 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3675 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
3676
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3677 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3678 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
3679 GtkHandleBox *wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3680 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3681 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3682 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3683 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
3684 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
3685
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3686 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3687 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3688 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3689
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3690 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
3691
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3692 gtk_widget_size_request (w, &req);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3693 FRAME_TOOLBAR_HEIGHT (f) = req.height;
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
3694 xg_height_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3695 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3696 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3697
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3698 /* 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
3699 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
3700 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
3701 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
3702 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
3703 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
3704
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3705 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
3706
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3707 static gboolean
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3708 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
3709 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3710 GdkEventCrossing *event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3711 gpointer client_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3712 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3713 /* 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
3714 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
3715 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
3716 Lisp_Object help, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3717
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3718 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
3719 return FALSE;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3720
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3721 if (event->type == GDK_ENTER_NOTIFY)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3722 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3723 idx *= TOOL_BAR_ITEM_NSLOTS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3724 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
3725
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3726 if (NILP (help))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3727 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
3728 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3729 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3730 help = Qnil;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3731
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3732 XSETFRAME (frame, f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3733 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
3734
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3735 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3736 }
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
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3739 /* 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
3740 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
3741 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
3742 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
3743 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
3744 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
3745 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
3746
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3747 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
3748
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3749 static gboolean
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3750 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
3751 GtkWidget *w;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3752 GdkEventExpose *event;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3753 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
3754 {
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3755 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
3756
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3757 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
3758
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3759 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
3760 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
3761
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3762 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
3763 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
3764
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3765 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
3766 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
3767
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3768 return FALSE;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3769 }
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3770
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3771 /* Attach a tool bar to frame F. */
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3772
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3773 static void
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3774 xg_pack_tool_bar (f)
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3775 FRAME_PTR f;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3776 {
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3777 struct x_output *x = f->output_data.x;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3778 int vbox_pos = x->menubar_widget ? 1 : 0;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3779
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3780 x->handlebox_widget = gtk_handle_box_new ();
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3781 g_signal_connect (G_OBJECT (x->handlebox_widget), "child-detached",
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3782 G_CALLBACK (xg_tool_bar_detach_callback), f);
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3783 g_signal_connect (G_OBJECT (x->handlebox_widget), "child-attached",
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3784 G_CALLBACK (xg_tool_bar_attach_callback), f);
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3785
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3786 gtk_container_add (GTK_CONTAINER (x->handlebox_widget),
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3787 x->toolbar_widget);
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3788
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3789 gtk_box_pack_start (GTK_BOX (x->vbox_widget), x->handlebox_widget,
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3790 FALSE, FALSE, 0);
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3791
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3792 gtk_box_reorder_child (GTK_BOX (x->vbox_widget), x->handlebox_widget,
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3793 vbox_pos);
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3794 gtk_widget_show_all (x->handlebox_widget);
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3795 }
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3796
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3797 /* 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
3798
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3799 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3800 xg_create_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3801 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3802 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3803 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
3804 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3805
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3806 x->toolbar_widget = gtk_toolbar_new ();
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3807 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
3808
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3809 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
3810
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3811 /* 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
3812 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
3813 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
3814 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
3815 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
3816 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
3817 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
3818 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
3819 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
3820 GTK_ORIENTATION_HORIZONTAL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3821 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3822
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3823
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3824 #define PROP(IDX) AREF (f->tool_bar_items, i * TOOL_BAR_ITEM_NSLOTS + (IDX))
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3825
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3826 /* Find the right-to-left image named by RTL in the tool bar images for F.
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3827 Returns IMAGE if RTL is not found. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3828
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3829 static Lisp_Object
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3830 find_rtl_image (f, image, rtl)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3831 FRAME_PTR f;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3832 Lisp_Object image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3833 Lisp_Object rtl;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3834 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3835 int i;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3836 Lisp_Object file, rtl_name;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3837 struct gcpro gcpro1, gcpro2;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3838 GCPRO2 (file, rtl_name);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3839
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3840 rtl_name = Ffile_name_nondirectory (rtl);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3841
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3842 for (i = 0; i < f->n_tool_bar_items; ++i)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3843 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3844 Lisp_Object rtl_image = PROP (TOOL_BAR_ITEM_IMAGES);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3845 if (!NILP (file = file_for_image (rtl_image)))
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3846 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3847 file = call1 (intern ("file-name-sans-extension"),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3848 Ffile_name_nondirectory (file));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3849 if (EQ (Fequal (file, rtl_name), Qt))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3850 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3851 image = rtl_image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3852 break;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3853 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3854 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3855 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3856
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3857 return image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3858 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3859
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3860 /* 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
3861
103916
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
3862 extern Lisp_Object Qx_gtk_map_stock;
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
3863
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3864 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3865 update_frame_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3866 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3867 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3868 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3869 GtkRequisition old_req, new_req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3870 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
3871 int hmargin = 0, vmargin = 0;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3872 GtkToolbar *wtoolbar;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3873 GtkToolItem *ti;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3874 GtkTextDirection dir;
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3875 int pack_tool_bar = x->handlebox_widget == NULL;
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 if (! FRAME_GTK_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3878 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3879
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3880 BLOCK_INPUT;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3881
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 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
3883 && 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
3884 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3885 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
3886 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
3887 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3888 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
3889 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3890 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
3891 && 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
3892 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
3893
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3894 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
3895 && 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
3896 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
3897 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3898
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
3899 /* 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
3900 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
3901 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
3902 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
3903 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
3904 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
3905
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3906 if (! x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3907 xg_create_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3908
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3909 wtoolbar = GTK_TOOLBAR (x->toolbar_widget);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3910 gtk_widget_size_request (GTK_WIDGET (wtoolbar), &old_req);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3911 dir = gtk_widget_get_direction (x->toolbar_widget);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3912
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3913 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
3914 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3915 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
3916 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
3917 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3918 int img_id;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3919 int icon_size = 0;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3920 struct image *img = NULL;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3921 Lisp_Object image;
100100
f5d2a2e44839 (update_frame_tool_bar): Initialize variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 98555
diff changeset
3922 Lisp_Object stock = Qnil;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3923 GtkStockItem stock_item;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3924 char *stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3925 char *icon_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3926 Lisp_Object rtl;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3927 GtkWidget *wbutton = NULL;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3928 GtkWidget *weventbox;
79460
1d493051aed3 (update_frame_tool_bar): Don't call x-gtk-map-stock if
Jan Djärv <jan.h.d@swipnet.se>
parents: 79340
diff changeset
3929 Lisp_Object specified_file;
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3930
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3931 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
3932
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3933 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
3934 {
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3935 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
3936 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
3937 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3938
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3939 image = PROP (TOOL_BAR_ITEM_IMAGES);
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 /* Ignore invalid image specifications. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3942 if (!valid_image_p (image))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3943 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3944 if (wbutton) gtk_widget_hide (wbutton);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3945 continue;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3946 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3947
79460
1d493051aed3 (update_frame_tool_bar): Don't call x-gtk-map-stock if
Jan Djärv <jan.h.d@swipnet.se>
parents: 79340
diff changeset
3948 specified_file = file_for_image (image);
103916
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
3949 if (!NILP (specified_file) && !NILP (Ffboundp (Qx_gtk_map_stock)))
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
3950 stock = call1 (Qx_gtk_map_stock, specified_file);
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
3951
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
3952 if (STRINGP (stock))
49468
f2be5cd8262f gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
Jan Djärv <jan.h.d@swipnet.se>
parents: 49434
diff changeset
3953 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3954 stock_name = SSDATA (stock);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3955 if (stock_name[0] == 'n' && stock_name[1] == ':')
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3956 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3957 GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (wtoolbar));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3958 GtkIconTheme *icon_theme = gtk_icon_theme_get_for_screen (screen);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3959
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3960 icon_name = stock_name + 2;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3961 stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3962 stock = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3963
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3964 if (! gtk_icon_theme_has_icon (icon_theme, icon_name))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3965 icon_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3966 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3967 icon_size = gtk_toolbar_get_icon_size (wtoolbar);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3968 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3969 else if (gtk_stock_lookup (SSDATA (stock), &stock_item))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3970 icon_size = gtk_toolbar_get_icon_size (wtoolbar);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3971 else
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3972 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3973 stock = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3974 stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3975 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3976 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3977
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3978 if (stock_name == NULL && icon_name == NULL)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3979 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3980 /* No stock image, or stock item not known. Try regular image. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3981
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3982 /* If image is a vector, choose the image according to the
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3983 button state. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3984 if (dir == GTK_TEXT_DIR_RTL
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3985 && !NILP (rtl = PROP (TOOL_BAR_ITEM_RTL_IMAGE))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3986 && STRINGP (rtl))
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3987 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3988 image = find_rtl_image (f, image, rtl);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3989 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3990
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3991 if (VECTORP (image))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3992 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3993 if (enabled_p)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3994 idx = (selected_p
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3995 ? TOOL_BAR_IMAGE_ENABLED_SELECTED
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3996 : TOOL_BAR_IMAGE_ENABLED_DESELECTED);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3997 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3998 idx = (selected_p
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3999 ? TOOL_BAR_IMAGE_DISABLED_SELECTED
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4000 : TOOL_BAR_IMAGE_DISABLED_DESELECTED);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4001
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4002 xassert (ASIZE (image) >= idx);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4003 image = AREF (image, idx);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4004 }
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4005 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4006 idx = -1;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4007
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4008 img_id = lookup_image (f, image);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4009 img = IMAGE_FROM_ID (f, img_id);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4010 prepare_image_for_display (f, img);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
4011
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4012 if (img->load_failed_p || img->pixmap == None)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4013 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4014 if (ti)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4015 gtk_widget_hide_all (GTK_WIDGET (ti));
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4016 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4017 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4018 /* Insert an empty (non-image) button */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4019 weventbox = gtk_event_box_new ();
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4020 wbutton = gtk_button_new ();
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4021 gtk_button_set_focus_on_click (GTK_BUTTON (wbutton), FALSE);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4022 gtk_button_set_relief (GTK_BUTTON (wbutton),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4023 GTK_RELIEF_NONE);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4024 gtk_container_add (GTK_CONTAINER (weventbox), wbutton);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4025 ti = gtk_tool_item_new ();
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4026 gtk_container_add (GTK_CONTAINER (ti), weventbox);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4027 gtk_toolbar_insert (GTK_TOOLBAR (x->toolbar_widget), ti, -1);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4028 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4029 continue;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4030 }
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
4031 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4032
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4033 if (ti == NULL)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4034 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4035 GtkWidget *w;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4036 if (stock_name)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4037 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4038 w = gtk_image_new_from_stock (stock_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4039 g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4040 (gpointer) xstrdup (stock_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4041 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4042 }
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
4043 else if (icon_name)
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4044 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4045 w = gtk_image_new_from_icon_name (icon_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4046 g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_ICON_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4047 (gpointer) xstrdup (icon_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4048 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4049 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4050 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4051 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4052 w = xg_get_image_for_pixmap (f, img, x->widget, NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4053 /* Save the image so we can see if an update is needed when
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4054 this function is called again. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4055 g_object_set_data (G_OBJECT (w), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4056 (gpointer)img->pixmap);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4057 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4058
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4059 gtk_misc_set_padding (GTK_MISC (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
4060 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
4061 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
4062 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
4063 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
4064 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
4065 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
4066 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
4067 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
4068 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
4069
42ad3938ee1a (update_frame_tool_bar): Handle modifying a toolbar item
Jan Djärv <jan.h.d@swipnet.se>
parents: 73661
diff changeset
4070
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
4071 /* 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
4072 g_signal_connect (G_OBJECT (ti), "create-menu-proxy",
103022
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
4073 G_CALLBACK (xg_tool_bar_menu_proxy),
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
4074 (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
4075
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
4076 g_signal_connect (G_OBJECT (wbutton), "clicked",
103022
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
4077 G_CALLBACK (xg_tool_bar_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
4078 (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
4079
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4080 gtk_widget_show_all (GTK_WIDGET (ti));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4081
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4082
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4083 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
4084
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
4085 /* 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
4086 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
4087 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
4088 "expose-event",
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
4089 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
4090 0);
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
4091
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4092 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
4093 gtk_tool_item_set_homogeneous (ti, FALSE);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
4094
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
4095 /* 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
4096 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
4097 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
4098 g_signal_connect (wbutton, "button-release-event",
103022
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
4099 G_CALLBACK (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
4100 NULL);
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4101
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4102 g_object_set_data (G_OBJECT (wbutton), XG_FRAME_DATA, (gpointer)f);
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
4103
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
4104 /* 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
4105 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
4106 "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
4107 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
4108 /* 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
4109 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
4110 "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
4111 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
4112 (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
4113 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
4114 "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
4115 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
4116 (gpointer) (EMACS_INT) i);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4117 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4118 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4119 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4120 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
4121 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
4122 XG_TOOL_BAR_IMAGE_DATA);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4123 gpointer old_stock_name = g_object_get_data (G_OBJECT (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4124 XG_TOOL_BAR_STOCK_NAME);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4125 gpointer old_icon_name = g_object_get_data (G_OBJECT (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4126 XG_TOOL_BAR_ICON_NAME);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4127 if (stock_name &&
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4128 (! old_stock_name || strcmp (old_stock_name, stock_name) != 0))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4129 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4130 gtk_image_set_from_stock (GTK_IMAGE (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4131 stock_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4132 g_object_set_data_full (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4133 (gpointer) xstrdup (stock_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4134 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4135 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4136 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4137 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4138 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4139 else if (icon_name &&
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4140 (! old_icon_name || strcmp (old_icon_name, icon_name) != 0))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4141 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4142 gtk_image_set_from_icon_name (GTK_IMAGE (wimage),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4143 icon_name, icon_size);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4144 g_object_set_data_full (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4145 (gpointer) xstrdup (icon_name),
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4146 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4147 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4148 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4149 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4150 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4151 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4152 else if (img && old_img != img->pixmap)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4153 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4154 (void) xg_get_image_for_pixmap (f, img, x->widget, wimage);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4155 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4156 (gpointer)img->pixmap);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4157
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4158 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME,
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4159 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4160 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4161 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4162
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4163 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
4164
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4165 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
4166 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
4167 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4168
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4169 #undef PROP
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4170 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4171
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4172 /* 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
4173 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
4174 do
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4175 {
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4176 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
4177 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
4178 } while (ti != NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4179
92366
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
4180 new_req.height = 0;
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
4181 if (pack_tool_bar && f->n_tool_bar_items != 0)
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4182 xg_pack_tool_bar (f);
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4183
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4184
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4185 gtk_widget_size_request (GTK_WIDGET (x->toolbar_widget), &new_req);
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4186 if (old_req.height != new_req.height
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
4187 && ! 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
4188 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4189 FRAME_TOOLBAR_HEIGHT (f) = new_req.height;
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4190 xg_height_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4191 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4192 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4193 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4194
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
4195 /* 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
4196 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
4197
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4198 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4199 free_frame_tool_bar (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4200 FRAME_PTR f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4201 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4202 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
4203
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4204 if (x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4205 {
93030
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4206 int is_packed = x->handlebox_widget != 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4207 BLOCK_INPUT;
93030
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4208 /* We may have created the toolbar_widget in xg_create_tool_bar, but
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4209 not the x->handlebox_widget which is created in xg_pack_tool_bar. */
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4210 if (is_packed)
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4211 gtk_container_remove (GTK_CONTAINER (x->vbox_widget),
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4212 x->handlebox_widget);
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4213 else
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4214 gtk_widget_destroy (x->toolbar_widget);
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4215
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4216 x->toolbar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4217 x->handlebox_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4218 FRAME_TOOLBAR_HEIGHT (f) = 0;
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4219 xg_height_changed (f);
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4220
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4221 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4222 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4223 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4224
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4225
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4226
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4227 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4228 Initializing
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4229 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4230 void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4231 xg_initialize ()
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4232 {
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4233 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
4234
75417
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4235 #if HAVE_XFT
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4236 /* 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
4237 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
4238 XftInit (0);
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4239 #endif
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
4240
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
4241 gdpy_def = NULL;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4242 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
4243 xg_detached_menus = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4244 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
4245 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
4246
49419
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4247 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
4248 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
4249
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4250 /* 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
4251 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
4252 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
4253 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
4254 "gtk-menu-bar-accel",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4255 "VoidSymbol",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4256 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
4257
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4258 /* 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
4259 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
4260 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
4261 "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
4262 "Emacs",
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4263 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
4264
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4265 /* 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
4266 dialog, this works for them also. */
103022
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
4267 binding_set = gtk_binding_set_by_class (g_type_class_ref (GTK_TYPE_DIALOG));
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4268 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
4269 "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
4270
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4271 /* Make menus close on C-g. */
103022
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
4272 binding_set = gtk_binding_set_by_class (g_type_class_ref
15bf0d8a6099 Make Emacs compile when Gtk+ and -DGTK_DISABLE_DEPRECATED is used.
Jan Djärv <jan.h.d@swipnet.se>
parents: 102705
diff changeset
4273 (GTK_TYPE_MENU_SHELL));
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4274 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
4275 "cancel", 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4276 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4277
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4278 #endif /* USE_GTK */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4279
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4280 /* arch-tag: fe7104da-bc1e-4aba-9bd1-f349c528f7e3
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4281 (do not change this comment) */