annotate src/gtkutil.c @ 109748:e2f8226efb99

Fix -Wwrite_strings in general and for Gtk+ specific code. * callproc.c (synch_process_death): Make const. (Fcall_process): Make signame const. * emacs.c (main): Pass char[] to putenv instead of literal. * floatfns.c (matherr): Use a const char* variable for x->name. * font.c (font_open_by_name): Make name const. * font.h (font_open_by_name): Make name const. * gtkutil.c (get_utf8_string): Always return an allocated string. Parameter is const. (create_dialog, xg_create_one_menuitem, create_menus) (xg_item_label_same_p, xg_update_menu_item): Free result from get_utf8_string. (xg_separator_p, xg_item_label_same_p): label is const. * gtkutil.h: Replace widget_value with struct _widget_value. (enum button_type, struct _widget_value): Remove and use the one from keyboard.h. * keyboard.h (_widget_value): Add defined USE_GTK. Replace Boolean with unsigned char and XtPointer with void *. * menu.c (Fx_popup_menu): error_name is const. * menu.h (w32_menu_show, ns_menu_show, xmenu_show): error parameter is const char **. * w32menu.c (w32_menu_show): * nsmenu.m (ns_menu_show): error parameter is const char **. * process.h (synch_process_death): Is const char*. * xmenu.c (Fx_popup_dialog): error_name is const char*. (xmenu_show): error parameter is const char **. pane_string is const char *. (button_names): Is const char *. (xdialog_show): error_name and pane_string is const. * xrdb.c (get_system_app): Make path const and use char *p for non-const char. * xselect.c (Fx_get_atom_name): Use char empty[] instead of literal "". * xsmfns.c (NOSPLASH_OPT): Change to char[]. (smc_save_yourself_CB): Do xstrdup on all ->type and ->name for props. Free them at the end. * xterm.c (emacs_class): New char[] for EMACS_CLASS. (xim_open_dpy, xim_initialize, xim_close_dpy): Use emacs_class. (x_term_init): Use char[] display_opt and name_opt instead of string literal. file is const char*.
author Jan D <jan.h.d@swipnet.se>
date Wed, 11 Aug 2010 14:34:46 +0200
parents 64732fa6188a
children be18c3b67d66
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>
108082
38a6893c8b9e * gtkutil.c: Include xsettings.h for Ftool_bar_get_system_style.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108024
diff changeset
38 #include "xsettings.h"
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
39
97059
984f2ac5a637 * lisp.h (init_weak_hash_tables, syms_of_font)
Andreas Schwab <schwab@suse.de>
parents: 97056
diff changeset
40 #ifdef HAVE_XFT
984f2ac5a637 * lisp.h (init_weak_hash_tables, syms_of_font)
Andreas Schwab <schwab@suse.de>
parents: 97056
diff changeset
41 #include <X11/Xft/Xft.h>
984f2ac5a637 * lisp.h (init_weak_hash_tables, syms_of_font)
Andreas Schwab <schwab@suse.de>
parents: 97056
diff changeset
42 #endif
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
43
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
44 #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
45 (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
46
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
47 #define FRAME_TOTAL_PIXEL_WIDTH(f) \
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
48 (FRAME_PIXEL_WIDTH (f) + FRAME_TOOLBAR_WIDTH (f))
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
49
67528
c5c00342184b * gtkutil.c (SSDATA): New macro to remove compiler warnings.
Jan Djärv <jan.h.d@swipnet.se>
parents: 65628
diff changeset
50 /* 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
51 #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
52
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
53 #ifndef HAVE_GTK_WIDGET_SET_HAS_WINDOW
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
54 #define gtk_widget_set_has_window(w, b) \
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
55 (gtk_fixed_set_has_window (GTK_FIXED (w), b))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
56 #endif
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
57 #ifndef HAVE_GTK_DIALOG_GET_ACTION_AREA
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
58 #define gtk_dialog_get_action_area(w) ((w)->action_area)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
59 #define gtk_dialog_get_content_area(w) ((w)->vbox)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
60 #endif
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
61 #ifndef HAVE_GTK_WIDGET_GET_SENSITIVE
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
62 #define gtk_widget_get_sensitive(w) (GTK_WIDGET_SENSITIVE (w))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
63 #endif
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
64 #ifndef HAVE_GTK_ADJUSTMENT_GET_PAGE_SIZE
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
65 #define gtk_adjustment_set_page_size(w, s) ((w)->page_size = (s))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
66 #define gtk_adjustment_set_page_increment(w, s) ((w)->page_increment = (s))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
67 #define gtk_adjustment_get_step_increment(w) ((w)->step_increment)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
68 #define gtk_adjustment_set_step_increment(w, s) ((w)->step_increment = (s))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
69 #endif
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
70 #if GTK_MAJOR_VERSION > 2 || GTK_MINOR_VERSION > 11
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
71 #define remove_submenu(w) gtk_menu_item_set_submenu ((w), NULL)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
72 #else
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
73 #define remove_submenu(w) gtk_menu_item_remove_submenu ((w))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
74 #endif
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
75
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
76
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
77 /***********************************************************************
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
78 Display handling functions
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
79 ***********************************************************************/
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
80
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
81 /* 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
82 may close all its displays. */
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
83
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
84 static GdkDisplay *gdpy_def;
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
85
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
86 /* 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
87 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
88 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
89
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
90 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
91 xg_set_screen (GtkWidget *w, FRAME_PTR f)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
92 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
93 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
94 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
95 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
96 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
97
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
98 if (GTK_IS_MENU (w))
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
99 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
100 else
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
101 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
102 }
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
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
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
113 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
114 xg_display_open (char *display_name, Display **dpy)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
115 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
116 GdkDisplay *gdpy;
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 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
119 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
120 {
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
121 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
122 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
123 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
124 }
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
125
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
126 *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
127 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
128
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
129
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
130 /* 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
131
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
132 void
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
133 xg_display_close (Display *dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
134 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
135 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
136
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
137 /* 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
138 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
139 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
140 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
141 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
142 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
143 GdkDisplay *gdpy_new = NULL;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
144
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
145 /* Find another display. */
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
146 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
147 if (dpyinfo->display != dpy)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
148 {
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
149 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
150 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
151 gdpy_new);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
152 break;
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
153 }
98555
440d088b9a23 (xg_display_open): Reset default display if none exists.
Chong Yidong <cyd@stupidchicken.com>
parents: 98545
diff changeset
154 gdpy_def = gdpy_new;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
155 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
156
72778
ab6be05ddfb1 * gtkutil.c (xg_display_close): Always change default display if needed,
Jan Djärv <jan.h.d@swipnet.se>
parents: 72637
diff changeset
157 #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
158 /* 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
159 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
160 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
161 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
162 #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
163 /* 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
164 gdk_display_close (gdpy);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
165 #endif
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
166 }
50129
d0142038feaa Reduce flicker in GTK scrollbars.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50112
diff changeset
167
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
168
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
169 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
170 Utility functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
171 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
172 /* 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
173 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
174 static int malloc_cpt;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
175
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
176 /* 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
177 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
178
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
179 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
180
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
181 widget_value *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
182 malloc_widget_value (void)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
183 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
184 widget_value *wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
185 if (widget_value_free_list)
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 wv = widget_value_free_list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
188 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
189 wv->free_list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
190 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
191 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
192 {
69025
5d9232b72d14 (malloc_widget_value): Use xmalloc.
Richard M. Stallman <rms@gnu.org>
parents: 68922
diff changeset
193 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
194 malloc_cpt++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
195 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
196 memset (wv, 0, sizeof (widget_value));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
197 return wv;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
198 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
199
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
200 /* 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
201 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
202
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
203 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
204 free_widget_value (widget_value *wv)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
205 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
206 if (wv->free_list)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
207 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
208
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
209 if (malloc_cpt > 25)
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 /* 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
212 We free it. */
100633
5395c014feb8 * buffer.c (init_buffer): Use realloc instead of xrealloc.
Andreas Schwab <schwab@suse.de>
parents: 100501
diff changeset
213 xfree (wv);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
214 malloc_cpt--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
215 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
216 else
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 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
219 widget_value_free_list = wv;
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 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
222
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
223
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
224 /* 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
225 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
226
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
227 GdkCursor *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
228 xg_create_default_cursor (Display *dpy)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
229 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
230 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
231 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
232 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
233
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
234 /* 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
235
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
236 static GdkPixbuf *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
237 xg_get_pixbuf_from_pix_and_mask (GdkPixmap *gpix,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
238 GdkPixmap *gmask,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
239 GdkColormap *cmap)
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
240 {
107219
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
241 int width, height;
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
242 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
243
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
244 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
245 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
246 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
247 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
248 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
249
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 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
251 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
252 GdkPixbuf *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
253 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
254 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
255 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
256 width, height);
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
257 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
258 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
259 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
260 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
261 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
262
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 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
264 {
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
265 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
266 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
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 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
269 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
270
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 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
272 {
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 /* 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
274 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
275 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
276 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
277
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
278 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
279 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
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 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
282
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
283 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
284 }
d5e998f50c2d * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64783
diff changeset
285
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 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
287 }
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
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
289 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
290 file_for_image (Lisp_Object image)
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
291 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
292 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
293 Lisp_Object tail;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
294
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
295 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
296 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
297 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
298 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
299 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
300
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
301 return specified_file;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
302 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
303
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
304 /* 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
305 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
306 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
307 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
308 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
309 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
310 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
311 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
312 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
313 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
314
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
315 static GtkWidget *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
316 xg_get_image_for_pixmap (FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
317 struct image *img,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
318 GtkWidget *widget,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
319 GtkImage *old_widget)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
320 {
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
321 GdkPixmap *gpix;
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
322 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
323 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
324 GdkColormap *cmap;
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
325 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
326
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
327 /* 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
328 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
329 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
330 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
331 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
332
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
333 /* 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
334 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
335 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
336
6b335e9ea577 * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
Jan Djärv <jan.h.d@swipnet.se>
parents: 69025
diff changeset
337 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
338 && 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
339 {
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
340 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
341 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
342 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
343 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
344
606e8e24acfe * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
Jan Djärv <jan.h.d@swipnet.se>
parents: 67875
diff changeset
345 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
346 }
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
347
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 /* 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
349 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
350 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
351
56269
4f8b4f60e748 (xg_get_image_for_pixmap): Add workaround for monochrome displays
Jan Djärv <jan.h.d@swipnet.se>
parents: 56268
diff changeset
352 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
353 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
354 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
355
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
356 /* 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
357 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
358 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
359 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
360 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
361 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
362 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
363 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
364 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
365 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
366 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
367
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
368 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
369 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
370 else
78809
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
371 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
372
c1d129148b98 (xg_get_image_for_pixmap): Always create a GdkPixbuf
Jan Djärv <jan.h.d@swipnet.se>
parents: 78787
diff changeset
373 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
374
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
375 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
376 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
377
56112
e4cfda8330d5 * gtkutil.c (xg_get_image_for_pixmap): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 55342
diff changeset
378 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
379 }
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
380
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
381
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
382 /* 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
383 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
384 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
385
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
386 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
387 xg_set_cursor (GtkWidget *w, GdkCursor *cursor)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
388 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
389 GdkWindow *window = gtk_widget_get_window(w);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
390 GList *children = gdk_window_peek_children (window);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
391
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
392 gdk_window_set_cursor (window, cursor);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
393
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
394 /* 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
395 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
396 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
397 Ditto for menus. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
398
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
399 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
400 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
401 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
402
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
403 /* 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
404
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
405 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
406 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
407 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
408 xg_list_node *list_start = list->next;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
409
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
410 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
411 node->next = list_start;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
412 node->prev = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
413 list->next = node;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
414 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
415
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
416 /* 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
417
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
418 static void
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
419 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
420 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
421 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
422 if (node == list_start)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
423 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
424 list->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
425 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
426 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
427 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
428 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
429 node->prev->next = node->next;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
430 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
431 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
432 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
433
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
434 /* Allocate and return a utf8 version of STR. If STR is already
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
435 utf8 or NULL, just return a copy of STR.
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
436 A new string is allocated and the caller must free the result
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
437 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
438
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
439 static char *
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
440 get_utf8_string (const char *str)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
441 {
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
442 char *utf8_str;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
443
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
444 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
445
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
446 /* 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
447 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
448 utf8_str = g_locale_to_utf8 (str, -1, 0, 0, 0);
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
449 else
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
450 return g_strdup (str);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
451
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
452 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
453 {
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
454 /* 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
455 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
456 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
457 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
458 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
459 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
460 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
461
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
462 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
463 &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
464 && 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
465 {
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 ++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
467 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
468 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
469 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
470 }
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
471
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
472 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
473 {
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 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
475 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
476 }
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 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
478
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 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
480 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
481
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
482 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
483 &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
484 && 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
485 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
486 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
487 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
488 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
489 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
490 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
491 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
492 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
493 }
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
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
495 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
496 {
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 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
498 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
499 }
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
500 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
501 {
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 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
503 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
504 }
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
505 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
506 return utf8_str;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
507 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
508
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
509
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
510
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
511 /***********************************************************************
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
512 Tooltips
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
513 ***********************************************************************/
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
514 /* Gtk+ calls this callback when the parent of our tooltip dummy changes.
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
515 We use that to pop down the tooltip. This happens if Gtk+ for some
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
516 reason wants to change or hide the tooltip. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
517
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
518 #ifdef USE_GTK_TOOLTIP
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
519
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
520 static void
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
521 hierarchy_ch_cb (GtkWidget *widget,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
522 GtkWidget *previous_toplevel,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
523 gpointer user_data)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
524 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
525 FRAME_PTR f = (FRAME_PTR) user_data;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
526 struct x_output *x = f->output_data.x;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
527 GtkWidget *top = gtk_widget_get_toplevel (x->ttip_lbl);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
528
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
529 if (! top || ! GTK_IS_WINDOW (top))
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
530 gtk_widget_hide (previous_toplevel);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
531 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
532
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
533 /* Callback called when Gtk+ thinks a tooltip should be displayed.
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
534 We use it to get the tooltip window and the tooltip widget so
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
535 we can manipulate the ourselves.
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
536
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
537 Return FALSE ensures that the tooltip is not shown. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
538
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
539 static gboolean
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
540 qttip_cb (GtkWidget *widget,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
541 gint xpos,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
542 gint ypos,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
543 gboolean keyboard_mode,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
544 GtkTooltip *tooltip,
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
545 gpointer user_data)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
546 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
547 FRAME_PTR f = (FRAME_PTR) user_data;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
548 struct x_output *x = f->output_data.x;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
549 if (x->ttip_widget == NULL)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
550 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
551 g_object_set (G_OBJECT (widget), "has-tooltip", FALSE, NULL);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
552 x->ttip_widget = tooltip;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
553 g_object_ref (G_OBJECT (tooltip));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
554 x->ttip_lbl = gtk_label_new ("");
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
555 g_object_ref (G_OBJECT (x->ttip_lbl));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
556 gtk_tooltip_set_custom (tooltip, x->ttip_lbl);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
557 x->ttip_window = GTK_WINDOW (gtk_widget_get_toplevel (x->ttip_lbl));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
558 /* Realize so we can safely get screen later on. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
559 gtk_widget_realize (GTK_WIDGET (x->ttip_window));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
560 gtk_widget_realize (x->ttip_lbl);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
561
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
562 g_signal_connect (x->ttip_lbl, "hierarchy-changed",
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
563 G_CALLBACK (hierarchy_ch_cb), f);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
564 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
565 return FALSE;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
566 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
567
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
568 #endif /* USE_GTK_TOOLTIP */
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
569
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
570 /* Prepare a tooltip to be shown, i.e. calculate WIDTH and HEIGHT.
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
571 Return zero if no system tooltip available, non-zero otherwise. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
572
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
573 int
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
574 xg_prepare_tooltip (FRAME_PTR f,
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
575 Lisp_Object string,
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
576 int *width,
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
577 int *height)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
578 {
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
579 #ifndef USE_GTK_TOOLTIP
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
580 return 0;
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
581 #else
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
582 struct x_output *x = f->output_data.x;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
583 GtkWidget *widget;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
584 GdkWindow *gwin;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
585 GdkScreen *screen;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
586 GtkSettings *settings;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
587 gboolean tt_enabled = TRUE;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
588 GtkRequisition req;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
589 Lisp_Object encoded_string;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
590
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
591 if (!x->ttip_lbl) return 0;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
592
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
593 BLOCK_INPUT;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
594 encoded_string = ENCODE_UTF_8 (string);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
595 widget = GTK_WIDGET (x->ttip_lbl);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
596 gwin = gtk_widget_get_window (GTK_WIDGET (x->ttip_window));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
597 screen = gdk_drawable_get_screen (gwin);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
598 settings = gtk_settings_get_for_screen (screen);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
599 g_object_get (settings, "gtk-enable-tooltips", &tt_enabled, NULL);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
600 if (tt_enabled)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
601 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
602 g_object_set (settings, "gtk-enable-tooltips", FALSE, NULL);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
603 /* Record that we disabled it so it can be enabled again. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
604 g_object_set_data (G_OBJECT (x->ttip_window), "restore-tt",
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
605 (gpointer)f);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
606 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
607
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
608 /* Prevent Gtk+ from hiding tooltip on mouse move and such. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
609 g_object_set_data (G_OBJECT
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
610 (gtk_widget_get_display (GTK_WIDGET (x->ttip_window))),
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
611 "gdk-display-current-tooltip", NULL);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
612
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
613 /* Put out dummy widget in so we can get callbacks for unrealize and
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
614 hierarchy-changed. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
615 gtk_tooltip_set_custom (x->ttip_widget, widget);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
616
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
617 gtk_tooltip_set_text (x->ttip_widget, SDATA (encoded_string));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
618 gtk_widget_size_request (GTK_WIDGET (x->ttip_window), &req);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
619 if (width) *width = req.width;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
620 if (height) *height = req.height;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
621
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
622 UNBLOCK_INPUT;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
623
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
624 return 1;
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
625 #endif /* USE_GTK_TOOLTIP */
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
626 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
627
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
628 /* Show the tooltip at ROOT_X and ROOT_Y.
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
629 xg_prepare_tooltip must have been called before this function. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
630
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
631 void
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
632 xg_show_tooltip (FRAME_PTR f, int root_x, int root_y)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
633 {
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
634 #ifdef USE_GTK_TOOLTIP
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
635 struct x_output *x = f->output_data.x;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
636 if (x->ttip_window)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
637 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
638 BLOCK_INPUT;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
639 gtk_window_move (x->ttip_window, root_x, root_y);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
640 gtk_widget_show_all (GTK_WIDGET (x->ttip_window));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
641 UNBLOCK_INPUT;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
642 }
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
643 #endif
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
644 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
645
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
646 /* Hide tooltip if shown. Do nothing if not shown.
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
647 Return non-zero if tip was hidden, non-ero if not (i.e. not using
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
648 system tooltips). */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
649
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
650 int
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
651 xg_hide_tooltip (FRAME_PTR f)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
652 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
653 int ret = 0;
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
654 #ifdef USE_GTK_TOOLTIP
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
655 if (f->output_data.x->ttip_window)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
656 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
657 GtkWindow *win = f->output_data.x->ttip_window;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
658 BLOCK_INPUT;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
659 gtk_widget_hide (GTK_WIDGET (win));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
660
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
661 if (g_object_get_data (G_OBJECT (win), "restore-tt"))
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
662 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
663 GdkWindow *gwin = gtk_widget_get_window (GTK_WIDGET (win));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
664 GdkScreen *screen = gdk_drawable_get_screen (gwin);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
665 GtkSettings *settings = gtk_settings_get_for_screen (screen);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
666 g_object_set (settings, "gtk-enable-tooltips", TRUE, NULL);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
667 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
668 UNBLOCK_INPUT;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
669
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
670 ret = 1;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
671 }
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
672 #endif
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
673 return ret;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
674 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
675
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
676
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
677 /***********************************************************************
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
678 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
679 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
680
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
681 /* 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
682 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
683 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
684 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
685
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
686 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
687 xg_set_geometry (FRAME_PTR f)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
688 {
107851
2a74858bccc0 Fix so top -10 and left -10 in frame parameters work.
Jan D. <jan.h.d@swipnet.se>
parents: 107219
diff changeset
689 if (f->size_hint_flags & (USPosition | PPosition))
93427
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
690 {
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
691 int left = f->left_pos;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
692 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
693 int top = f->top_pos;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
694 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
695 char geom_str[32];
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
696
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
697 if (xneg)
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
698 left = -left;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
699 if (yneg)
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
700 top = -top;
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
701
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
702 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
703 FRAME_PIXEL_WIDTH (f),
107891
bf5fce1e8e34 Set USER_POS in hint_flags to work around Cygwin problem.
Jan D. <jan.h.d@swipnet.se>
parents: 107851
diff changeset
704 FRAME_PIXEL_HEIGHT (f),
93427
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
705 (xneg ? '-' : '+'), left,
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
706 (yneg ? '-' : '+'), top);
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
707
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
708 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
709 geom_str))
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
710 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
711 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
712 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
713
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
714 /* 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
715 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
716
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
717 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
718 xg_clear_under_internal_border (FRAME_PTR f)
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
719 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
720 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
721 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
722 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
723 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
724 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
725 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
726 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
727 0, 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
728 FRAME_PIXEL_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
729 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
730 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
731 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
732 0, 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
733 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
734 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
735 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
736 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
737 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
738 FRAME_PIXEL_WIDTH (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
739 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
740 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
741 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
742 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
743 0,
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
744 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
745 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
746 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
747 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
748
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
749 /* 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
750 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
751 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
752 F is the frame to resize.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
753 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
754
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
755 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
756 xg_frame_resized (FRAME_PTR f, int pixelwidth, int pixelheight)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
757 {
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
758 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
759
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
760 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
761 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
762 if (FRAME_GTK_WIDGET (f) && gtk_widget_get_mapped (FRAME_GTK_WIDGET (f)))
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
763 gdk_window_get_geometry (gtk_widget_get_window (FRAME_GTK_WIDGET (f)),
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
764 0, 0,
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
765 &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
766 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
767 }
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
768
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
769
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
770 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
771 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
772
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
773 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
774 || 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
775 || 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
776 || pixelheight != FRAME_PIXEL_HEIGHT (f))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
777 {
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
778 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
779 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
780
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
781 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
782 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
783 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
784 cancel_mouse_face (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
785 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
786 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
787
93427
753ad51473c7 (xg_set_geometry): Fix indentation.
Jan Djärv <jan.h.d@swipnet.se>
parents: 93030
diff changeset
788 /* 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
789 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
790
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
791 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
792 xg_frame_set_char_size (FRAME_PTR f, int cols, int rows)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
793 {
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
794 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
795 + 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
796 int pixelwidth;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
797
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
798 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
799 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
800
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
801 /* 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
802 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
803 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
804 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
805 windows. */
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
806 f->scroll_bar_actual_width
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
807 = 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
808
50099
a62497b91c74 Use generic compute_fringe_widths.
Kim F. Storm <storm@cua.dk>
parents: 50063
diff changeset
809 compute_fringe_widths (f, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
810
51211
28ea05de2dc5 Make (many) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50778
diff changeset
811 /* 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
812 after calculating that value. */
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
813 pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, cols)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
814 + FRAME_TOOLBAR_WIDTH (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
815
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
816
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
817 /* 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
818 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
819
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
820 /* 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
821 but not rows/cols. */
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
822 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
823 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
824 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
825
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
826 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
827 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
828
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
829 /* 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
830 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
831 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
832 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
833 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
834 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
835 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
836 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
837 {
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
838 /* 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
839 (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
840 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
841 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
842 }
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
843 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
844 {
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
845 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
846 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
847 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
848 }
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
849 }
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
850
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
851 /* Handle height/width changes (i.e. add/remove/move menu/toolbar).
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
852 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
853
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
854 static void
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
855 xg_height_or_width_changed (FRAME_PTR f)
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
856 {
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
857 gtk_window_resize (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
858 FRAME_TOTAL_PIXEL_WIDTH (f),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
859 FRAME_TOTAL_PIXEL_HEIGHT (f));
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
860 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
861 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
862 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
863
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
864 /* 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
865 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
866 X Window that aren't accessible.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
867
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
868 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
869
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
870 GtkWidget *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
871 xg_win_to_widget (Display *dpy, Window wdesc)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
872 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
873 gpointer gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
874 GtkWidget *gwdesc = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
875
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
876 BLOCK_INPUT;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
877
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
878 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
879 wdesc);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
880 if (gdkwin)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
881 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
882 GdkEvent event;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
883 event.any.window = gdkwin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
884 gwdesc = gtk_get_event_widget (&event);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
885 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
886
49323
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 return gwdesc;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
889 }
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 /* 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
892 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
893
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
894 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
895 xg_pix_to_gcolor (GtkWidget *w, long unsigned int pixel, GdkColor *c)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
896 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
897 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
898 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
899 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
900
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
901 /* 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
902 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
903
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
904 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
905 xg_create_frame_widgets (FRAME_PTR f)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
906 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
907 GtkWidget *wtop;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
908 GtkWidget *wvbox, *whbox;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
909 GtkWidget *wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
910 GdkColor bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
911 GtkRcStyle *style;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
912 char *title = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
913
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
914 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
915
91632
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
916 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
917 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
918 else
370f67c176eb (xg_create_frame_widgets): If frame is embedded, call
Jan Djärv <jan.h.d@swipnet.se>
parents: 87649
diff changeset
919 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
920
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
921 xg_set_screen (wtop, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
922
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
923 wvbox = gtk_vbox_new (FALSE, 0);
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
924 whbox = gtk_hbox_new (FALSE, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
925 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
926
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
927 if (! wtop || ! wvbox || ! whbox || ! wfixed)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
928 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
929 if (wtop) gtk_widget_destroy (wtop);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
930 if (wvbox) gtk_widget_destroy (wvbox);
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
931 if (whbox) gtk_widget_destroy (whbox);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
932 if (wfixed) gtk_widget_destroy (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
933
60185
391f44959566 (xg_create_frame_widgets): UNBLOCK_INPUT on error.
Kim F. Storm <storm@cua.dk>
parents: 59913
diff changeset
934 UNBLOCK_INPUT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
935 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
936 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
937
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
938 /* 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
939 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
940 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
941 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
942
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
943 /* 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
944 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
945 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
946
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
947 if (title) gtk_window_set_title (GTK_WINDOW (wtop), title);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
948
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
949 FRAME_GTK_OUTER_WIDGET (f) = wtop;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
950 FRAME_GTK_WIDGET (f) = wfixed;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
951 f->output_data.x->vbox_widget = wvbox;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
952 f->output_data.x->hbox_widget = whbox;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
953
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
954 gtk_widget_set_has_window (wfixed, TRUE);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
955
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
956 gtk_container_add (GTK_CONTAINER (wtop), wvbox);
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
957 gtk_box_pack_start (GTK_BOX (wvbox), whbox, TRUE, TRUE, 0);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
958 gtk_box_pack_start (GTK_BOX (whbox), wfixed, TRUE, TRUE, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
959
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
960 if (FRAME_EXTERNAL_TOOL_BAR (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
961 update_frame_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
962
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
963 /* 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
964 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
965 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
966 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
967 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
968 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
969
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
970 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
971 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
972 SSDATA (Vx_resource_class));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
973
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
974 /* 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
975 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
976 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
977 G_CALLBACK (gtk_true), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
978
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
979 /* 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
980 and specify it.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
981 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
982 xg_set_geometry (f);
107219
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
983 f->win_gravity
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
984 = gtk_window_get_gravity (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
985
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
986 gtk_widget_add_events (wfixed,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
987 GDK_POINTER_MOTION_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
988 | GDK_EXPOSURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
989 | GDK_BUTTON_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
990 | GDK_BUTTON_RELEASE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
991 | GDK_KEY_PRESS_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
992 | GDK_ENTER_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
993 | GDK_LEAVE_NOTIFY_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
994 | GDK_FOCUS_CHANGE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
995 | GDK_STRUCTURE_MASK
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
996 | GDK_VISIBILITY_NOTIFY_MASK);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
997
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
998 /* 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
999 by callers of this function. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1000 gtk_widget_realize (wfixed);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1001 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
1002
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1003 /* 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
1004 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
1005 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
1006 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
1007
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1008 /* 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
1009 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
1010 of background color. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1011 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
1012
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1013 /* 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
1014 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
1015 gtk_widget_modify_style (wfixed, style);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1016
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
1017 #ifdef USE_GTK_TOOLTIP
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1018 /* Steal a tool tip window we can move ourselves. */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1019 f->output_data.x->ttip_widget = 0;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1020 f->output_data.x->ttip_lbl = 0;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1021 f->output_data.x->ttip_window = 0;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1022 gtk_widget_set_tooltip_text (wtop, "Dummy text");
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1023 g_signal_connect (wtop, "query-tooltip", G_CALLBACK (qttip_cb), f);
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
1024 #endif
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1025
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1026 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1027
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1028 return 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1029 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1030
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1031 void
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1032 xg_free_frame_widgets (FRAME_PTR f)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1033 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1034 if (FRAME_GTK_OUTER_WIDGET (f))
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1035 {
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1036 struct x_output *x = f->output_data.x;
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1037 gtk_widget_destroy (FRAME_GTK_OUTER_WIDGET (f));
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1038 FRAME_X_WINDOW (f) = 0; /* Set to avoid XDestroyWindow in xterm.c */
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1039 FRAME_GTK_OUTER_WIDGET (f) = 0;
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
1040 #ifdef USE_GTK_TOOLTIP
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1041 if (x->ttip_lbl)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1042 gtk_widget_destroy (x->ttip_lbl);
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1043 if (x->ttip_widget)
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1044 g_object_unref (G_OBJECT (x->ttip_widget));
109615
09adf0d4c6d9 Don't use Gtk+ tooltip unless Gtk+ version => 2.14.
Jan D. <jan.h.d@swipnet.se>
parents: 109604
diff changeset
1045 #endif
109604
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1046 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1047 }
43eca6c9f493 Use Gtk+ tooltips by default for Gtk+ Emacs.
Jan D <jan.h.d@swipnet.se>
parents: 109581
diff changeset
1048
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1049 /* 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
1050 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
1051 that the window now has.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1052 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
1053 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
1054
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1055 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1056 x_wm_set_size_hint (FRAME_PTR f, long int flags, int user_position)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1057 {
98545
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1058 /* 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
1059 to its own defaults. */
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1060 GdkGeometry size_hints;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1061 gint hint_flags = 0;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1062 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
1063 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
1064 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
1065
107219
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
1066 /* Don't set size hints during initialization; that apparently leads
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
1067 to a race condition. See the thread at
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
1068 http://lists.gnu.org/archive/html/emacs-devel/2008-10/msg00033.html */
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
1069 if (NILP (Vafter_init_time) || !FRAME_GTK_OUTER_WIDGET (f))
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
1070 return;
07507204ac6f Move declarations before statements.
Jan D. <jan.h.d@swipnet.se>
parents: 106815
diff changeset
1071
98545
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1072 if (flags)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1073 {
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1074 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
1075 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
1076 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
1077 }
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1078 else
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1079 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
1080
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1081 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
1082 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
1083
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1084 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
1085 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
1086 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
1087
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1088 hint_flags |= GDK_HINT_BASE_SIZE;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
1089 base_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0) + FRAME_TOOLBAR_WIDTH (f);
98545
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1090 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
1091 + 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
1092
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1093 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
1094
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1095 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
1096 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
1097 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
1098 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
1099
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1100 /* 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
1101 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
1102 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
1103 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
1104 if (win_gravity == NorthWestGravity)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1105 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
1106 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
1107 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
1108 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
1109 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
1110 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
1111 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
1112 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
1113 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
1114 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
1115 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
1116 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
1117 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
1118 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
1119 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
1120 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
1121 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
1122 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
1123 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
1124
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1125 if (user_position)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1126 {
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1127 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
1128 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
1129 }
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1130
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1131 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
1132 || memcmp (&size_hints,
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1133 &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
1134 sizeof (size_hints)) != 0)
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1135 {
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1136 BLOCK_INPUT;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1137 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
1138 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
1139 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
1140 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
1141 UNBLOCK_INPUT;
d19cd21bc42d (x_wm_set_size_hint): Return immediately if called during
Chong Yidong <cyd@stupidchicken.com>
parents: 97076
diff changeset
1142 }
49323
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 /* Change background color of a frame.
96363
f9d35151b907 American English spelling fix.
Glenn Morris <rgm@gnu.org>
parents: 95954
diff changeset
1146 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
1147 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
1148 F is the frame to change,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1149 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
1150
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1151 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1152 xg_set_background_color (FRAME_PTR f, long unsigned int bg)
49323
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 if (FRAME_GTK_WIDGET (f))
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 GdkColor gdk_bg;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1157
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1158 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1159 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
1160 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
1161 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1162 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1163 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1164
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1165
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1166 /* 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
1167 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
1168
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1169 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1170 xg_set_frame_icon (FRAME_PTR f, Pixmap icon_pixmap, Pixmap icon_mask)
65006
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1171 {
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1172 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
1173 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
1174 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
1175 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
1176
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1177 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
1178 }
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1179
ec2fa2e1d4ea * gtkutil.c (xg_set_frame_icon): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 64936
diff changeset
1180
49323
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 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1183 Dialog functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1184 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1185 /* 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
1186 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
1187
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
1188 static const char *
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1189 get_dialog_title (char key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1190 {
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
1191 const char *title = "";
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1192
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1193 switch (key) {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1194 case 'E': case 'e':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1195 title = "Error";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1196 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1197
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1198 case 'I': case 'i':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1199 title = "Information";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1200 break;
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 case 'L': case 'l':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1203 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1204 break;
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 case 'P': case 'p':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1207 title = "Prompt";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1208 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1209
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1210 case 'Q': case 'q':
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1211 title = "Question";
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1212 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1213 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1214
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1215 return title;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1216 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1217
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1218 /* 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
1219 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
1220 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
1221 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
1222 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
1223 W is the dialog widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1224 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
1225 user_data is NULL (not used).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1226
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1227 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
1228
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1229 static gboolean
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1230 dialog_delete_callback (GtkWidget *w, GdkEvent *event, gpointer user_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1231 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1232 gtk_widget_unmap (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1233 return TRUE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1234 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1235
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1236 /* 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
1237 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
1238 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
1239 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
1240
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1241 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
1242
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1243 static GtkWidget *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1244 create_dialog (widget_value *wv,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1245 GCallback select_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1246 GCallback deactivate_cb)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1247 {
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
1248 const char *title = get_dialog_title (wv->name[0]);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1249 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
1250 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
1251 int left_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1252 int button_nr = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1253 int button_spacing = 10;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1254 GtkWidget *wdialog = gtk_dialog_new ();
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1255 GtkDialog *wd = GTK_DIALOG (wdialog);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1256 GtkBox *cur_box = GTK_BOX (gtk_dialog_get_action_area (wd));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1257 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1258 GtkWidget *wvbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1259 GtkWidget *whbox_up;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1260 GtkWidget *whbox_down;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1261
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1262 /* 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
1263 instead. This looks better. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1264 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
1265
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1266 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
1267 left_buttons = total_buttons - right_buttons;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1268
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1269 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
1270 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
1271
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1272
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1273 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1274 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1275 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
1276 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
1277 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
1278
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1279 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
1280 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
1281 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
1282
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1283 cur_box = GTK_BOX (whbox_up);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1284 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1285
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1286 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
1287 G_CALLBACK (dialog_delete_callback), 0);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1288
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1289 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1290 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1291 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
1292 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
1293 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1294
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1295 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
1296 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1297 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
1298 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1299 GtkRequisition req;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1300
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
1301 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
1302 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1303 GtkBox *wvbox = GTK_BOX (gtk_dialog_get_content_area (wd));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1304 /* 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
1305 w = gtk_label_new (utf8_label);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1306 gtk_box_pack_start (wvbox, gtk_label_new (""), FALSE, FALSE, 0);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1307 gtk_box_pack_start (wvbox, w, TRUE, TRUE, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1308 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
1309
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1310 /* 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
1311 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
1312 gtk_widget_realize (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1313 gtk_widget_size_request (w, &req);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1314 gtk_box_set_spacing (wvbox, 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
1315 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
1316 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
1317 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1318 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1319 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1320 /* 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
1321 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
1322 if (! item->enabled)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1323 gtk_widget_set_sensitive (w, FALSE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1324 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1325 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
1326 select_cb, item->call_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1327
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1328 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
1329 if (++button_nr == left_buttons)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1330 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1331 if (make_two_rows)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1332 cur_box = GTK_BOX (whbox_down);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1333 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1334 gtk_box_pack_start (cur_box,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1335 gtk_label_new (""),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1336 TRUE, TRUE,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1337 button_spacing);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1338 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1339 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1340
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
1341 if (utf8_label)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1342 g_free (utf8_label);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1343 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1344
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1345 return wdialog;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1346 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1347
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
1348 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
1349 {
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
1350 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
1351 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
1352 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
1353 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
1354 };
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
1355
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
1356 /* 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
1357 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
1358 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
1359
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
1360 static void
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1361 xg_dialog_response_cb (GtkDialog *w,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1362 gint response,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1363 gpointer user_data)
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
1364 {
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
1365 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
1366 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
1367 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
1368 }
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
1369
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
1370
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
1371 /* 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
1372
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
1373 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1374 pop_down_dialog (Lisp_Object arg)
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
1375 {
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
1376 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
1377 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
1378
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
1379 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
1380 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
1381 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
1382
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
1383 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
1384 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
1385
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
1386 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
1387
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
1388 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
1389 }
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
1390
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
1391 /* 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
1392 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
1393
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
1394 static gboolean
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1395 xg_maybe_add_timer (gpointer data)
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
1396 {
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
1397 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
1398 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
1399 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
1400 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
1401
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
1402 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
1403
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
1404 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
1405 {
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
1406 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
1407 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
1408 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
1409 }
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
1410 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
1411 }
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
1412
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
1413
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
1414 /* 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
1415 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
1416 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
1417
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
1418 static int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1419 xg_dialog_run (FRAME_PTR f, GtkWidget *w)
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
1420 {
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
1421 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
1422 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
1423
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
1424 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
1425 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
1426 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
1427 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
1428 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
1429
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
1430 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
1431 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
1432 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
1433 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
1434
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
1435 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
1436 "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
1437 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
1438 &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
1439 /* 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
1440 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
1441 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
1442
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
1443 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
1444
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
1445 (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
1446 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
1447
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
1448 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
1449 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
1450
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
1451 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
1452 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1453
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
1454
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1455 /***********************************************************************
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1456 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
1457 ***********************************************************************/
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1458 /* 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
1459 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
1460
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1461 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1462 xg_uses_old_file_dialog (void)
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1463 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1464 #ifdef HAVE_GTK_FILE_SELECTION_NEW
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
1465 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
1466 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
1467 #else
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1468 return 0;
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1469 #endif
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1470 }
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1471
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1472
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 109067
diff changeset
1473 typedef char * (*xg_get_file_func) (GtkWidget *);
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1474
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1475 /* 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
1476 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
1477
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1478 static char *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1479 xg_get_file_name_from_chooser (GtkWidget *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
1480 {
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1481 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
1482 }
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1483
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1484 /* 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
1485 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
1486
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1487 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1488 xg_toggle_visibility_cb (GtkWidget *widget, gpointer data)
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1489 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1490 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
1491 gboolean visible;
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1492 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
1493 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
1494 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1495
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1496
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1497 /* 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
1498 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
1499 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
1500 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
1501 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
1502
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1503 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1504 xg_toggle_notify_cb (GObject *gobject, GParamSpec *arg1, gpointer user_data)
68100
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1505 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1506 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
1507
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1508 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
1509 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1510 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
1511 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
1512
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1513 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
1514 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
1515
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1516 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
1517 {
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1518 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
1519 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
1520 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1521 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
1522 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
1523 (G_OBJECT (wtoggle),
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1524 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
1525 gobject);
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1526 }
e5611feba7f7 * gtkutil.c (xg_toggle_notify_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68027
diff changeset
1527 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
1528 }
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1529 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1530
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
1531 /* 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
1532 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
1533 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
1534 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
1535 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
1536 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
1537 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
1538
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1539 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
1540
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1541 static GtkWidget *
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1542 xg_get_file_with_chooser (FRAME_PTR f,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1543 char *prompt,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1544 char *default_filename,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1545 int mustmatch_p, int only_dir_p,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
1546 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
1547 {
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1548 char message[1024];
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1549
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1550 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
1551 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
1552 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
1553 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
1554 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
1555 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
1556 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
1557
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
1558
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1559 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
1560 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
1561
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1562 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
1563 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
1564 (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
1565 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
1566 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
1567 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
1568 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
1569
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1570 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
1571 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
1572 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
1573
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1574 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
1575 {
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1576 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
1577 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
1578 }
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1579 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
1580 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
1581 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
1582 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
1583 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
1584
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
1585 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
1586 {
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1587 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
1588 /* 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
1589 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
1590 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
1591 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
1592 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
1593 "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
1594 "use-file-dialog to turn it off.");
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1595
72931
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1596 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
1597 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
1598 }
0ee8cea94c25 * gtkutil.c (xg_get_file_with_chooser): Check
Jan Djärv <jan.h.d@swipnet.se>
parents: 72928
diff changeset
1599
67843
6cf5dc28bd1e * gtkutil.c (xg_toggle_visibility_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67761
diff changeset
1600 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
1601 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
1602 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
1603 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
1604
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
1605 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
1606 {
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1607 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
1608 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
1609 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
1610 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
1611
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
1612 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
1613
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
1614 /* 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
1615 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
1616 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
1617 file = Fexpand_file_name (file, Qnil);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1618
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
1619 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
1620 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
1621 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
1622 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
1623 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
1624 {
af91ff74c754 * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
Jan Djärv <jan.h.d@swipnet.se>
parents: 71160
diff changeset
1625 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
1626 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
1627 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
1628 {
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
1629 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
1630 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
1631 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
1632 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
1633 }
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
1634 }
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
1635
a3fa0e63dd67 * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
Jan Djärv <jan.h.d@swipnet.se>
parents: 57900
diff changeset
1636 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
1637 }
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
1638
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1639 *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
1640 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
1641 }
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1642
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1643 #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
1644
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1645 /* 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
1646 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
1647
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1648 static char *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1649 xg_get_file_name_from_selector (GtkWidget *w)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1650 {
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 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
1652 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
1653 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1654
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1655 /* Create a file selection dialog.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1656 F is the current frame.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1657 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
1658 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
1659 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
1660 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
1661 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
1662
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1663 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
1664
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1665 static GtkWidget *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1666 xg_get_file_with_selection (FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1667 char *prompt,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1668 char *default_filename,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1669 int mustmatch_p, int only_dir_p,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1670 xg_get_file_func *func)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1671 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1672 GtkWidget *filewin;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1673 GtkFileSelection *filesel;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1674
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1675 filewin = gtk_file_selection_new (prompt);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1676 filesel = GTK_FILE_SELECTION (filewin);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1677
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1678 if (default_filename)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1679 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
1680
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1681 if (mustmatch_p)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1682 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1683 /* 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
1684 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
1685 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
1686 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1687
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1688 *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
1689
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1690 return filewin;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1691 }
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
1692 #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
1693
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1694 /* 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
1695 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
1696 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
1697 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
1698 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
1699 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
1700 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
1701 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
1702 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
1703
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1704 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
1705 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
1706
c955f6add62a * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
Jan Djärv <jan.h.d@swipnet.se>
parents: 57715
diff changeset
1707 char *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1708 xg_get_file_name (FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1709 char *prompt,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1710 char *default_filename,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1711 int mustmatch_p,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1712 int only_dir_p)
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
1713 {
58284
10efc827e15c * gtkutil.c (xg_get_file_name): Fix typo in
Jan Djärv <jan.h.d@swipnet.se>
parents: 58201
diff changeset
1714 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
1715 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
1716 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
1717 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
1718
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1719 #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
1720 /* 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
1721 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
1722 threads. */
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1723 sigblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1724 #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
1725
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1726 #ifdef HAVE_GTK_FILE_SELECTION_NEW
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
1727
67761
5b8799d65159 * xfns.c (Fx_uses_old_gtk_dialog): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 67528
diff changeset
1728 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
1729 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
1730 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
1731 else
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1732 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
1733 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
1734
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1735 #else /* not 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
1736 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
1737 mustmatch_p, only_dir_p, &func);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
1738 #endif /* not 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
1739
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1740 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
1741
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
1742 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
1743
58818
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1744 #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
1745 sigunblock (sigmask (__SIGRTMIN));
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1746 #endif
f8cddae7d959 * gtkutil.c: Include signal.h and syssignal.h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 58817
diff changeset
1747
58200
3608b64ba20f * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
Jan Djärv <jan.h.d@swipnet.se>
parents: 57941
diff changeset
1748 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
1749 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
1750
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
1751 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
1752 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
1753 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1754
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1755 #ifdef HAVE_FREETYPE
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1756 /* 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
1757 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
1758 format:
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1759
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1760 `FAMILY [VALUE1 VALUE2] SIZE'
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1761
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1762 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
1763 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
1764
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1765 char *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
1766 xg_get_font_name (FRAME_PTR f, const char *default_name)
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1767 {
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
1768 GtkWidget *w;
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1769 char *fontname = NULL;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1770 int done = 0;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1771
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1772 #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
1773 sigblock (sigmask (__SIGRTMIN));
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1774 #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
1775
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1776 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
1777 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
1778 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
1779 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
1780 default_name);
95794
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1781
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1782 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
1783
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
1784 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
1785
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1786 #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
1787 sigunblock (sigmask (__SIGRTMIN));
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1788 #endif
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1789
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1790 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
1791 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
1792 (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
1793
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
1794 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
1795 return fontname;
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1796 }
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1797 #endif /* HAVE_FREETYPE */
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1798
e4d692886628 (xg_dialog_response_cb): Rename from xg_file_response_callback.
Chong Yidong <cyd@stupidchicken.com>
parents: 95481
diff changeset
1799
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1800
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1801 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1802 Menu functions.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1803 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1804
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
1805 /* 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
1806 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
1807 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
1808
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1809 #define MENU_ITEM_NAME "emacs-menuitem"
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1810
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 /* 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
1813 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
1814 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
1815
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1816 /* 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
1817 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
1818 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
1819
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1820 /* 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
1821 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
1822 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
1823
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1824 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
1825 share the same structure, hence the reference count.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1826
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1827 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
1828 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
1829
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1830 static xg_menu_cb_data *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1831 make_cl_data (xg_menu_cb_data *cl_data, FRAME_PTR f, GCallback highlight_cb)
49323
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 if (! cl_data)
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 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
1836 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1837 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
1838 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
1839 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1840 cl_data->ref_count = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1841
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1842 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
1843 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1844
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1845 cl_data->ref_count++;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1846
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1847 return cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1848 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1849
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1850 /* 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
1851 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
1852
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1853 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
1854 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
1855 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
1856 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
1857 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
1858 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
1859 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
1860
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1861 static void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1862 update_cl_data (xg_menu_cb_data *cl_data,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1863 FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1864 GCallback highlight_cb)
49323
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 if (cl_data)
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 cl_data->f = f;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1869 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
1870 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
1871 cl_data->highlight_cb = highlight_cb;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1872 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1873 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1874
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1875 /* Decrease reference count for CL_DATA.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1876 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
1877
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1878 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1879 unref_cl_data (xg_menu_cb_data *cl_data)
49323
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 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
1882 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1883 cl_data->ref_count--;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1884 if (cl_data->ref_count == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1885 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1886 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
1887 xfree (cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1888 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1889 }
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1892 /* 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
1893
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1894 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1895 xg_mark_data (void)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1896 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1897 xg_list_node *iter;
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 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
1900 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
1901
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1902 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
1903 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1904 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
1905
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1906 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
1907 mark_object (cb_data->help);
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 }
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 /* 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
1913 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
1914 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
1915
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1916 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1917 menuitem_destroy_callback (GtkWidget *w, gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1918 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1919 if (client_data)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1920 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1921 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
1922 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
1923 xfree (data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1924 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1925 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1926
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1927 /* 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
1928 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
1929 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
1930 CLIENT_DATA is not used.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1931
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1932 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
1933
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1934 static gboolean
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1935 menuitem_highlight_callback (GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1936 GdkEventCrossing *event,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
1937 gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1938 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1939 GdkEvent ev;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1940 GtkWidget *subwidget;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1941 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
1942
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1943 ev.crossing = *event;
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1944 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
1945 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
1946 XG_ITEM_DATA);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1947 if (data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1948 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1949 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
1950 {
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
1951 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
1952 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
1953 (*func) (subwidget, call_data);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1954 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1955 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1956
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1957 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1958 }
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 /* 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
1961 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
1962 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
1963
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1964 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1965 menu_destroy_callback (GtkWidget *w, gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1966 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1967 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
1968 }
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 /* 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
1971 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
1972
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1973 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
1974
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1975 static GtkWidget *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
1976 make_widget_for_menu_item (const char *utf8_label, const char *utf8_key)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1977 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1978 GtkWidget *wlbl;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1979 GtkWidget *wkey;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1980 GtkWidget *wbox;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
1981
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1982 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
1983 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
1984 wkey = gtk_label_new (utf8_key);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1985
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1986 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
1987 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
1988
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1989 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
1990 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
1991
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1992 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
1993 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
1994 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
1995
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1996 return wbox;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1997 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1998
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
1999 /* 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
2000 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
2001 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
2002 ITEM is the widget_value describing the menu item.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2003
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2004 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
2005 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
2006 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
2007 *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
2008 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
2009
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2010 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
2011 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
2012
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2013 static GtkWidget *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
2014 make_menu_item (const char *utf8_label,
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
2015 const char *utf8_key,
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2016 widget_value *item,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2017 GSList **group)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2018 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2019 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2020 GtkWidget *wtoadd = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2021
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
2022 /* 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
2023 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
2024 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
2025 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
2026 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
2027
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2028 if (utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2029 wtoadd = make_widget_for_menu_item (utf8_label, utf8_key);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2030
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2031 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
2032 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2033 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2034 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
2035 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
2036 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
2037 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2038 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
2039 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2040 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
2041 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
2042 *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
2043 if (item->selected)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2044 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
2045 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2046 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2047 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2048 *group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2049 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
2050 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
2051 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2052
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2053 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
2054 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
2055
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2056 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2057 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2058
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
2059 /* 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
2060 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
2061
105959
ba3ffbd9c422 * process.c (ifflag_def): Make flag_sym constant.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105936
diff changeset
2062 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
2063 "space",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2064 "no-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2065 "single-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2066 "double-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2067 "single-dashed-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2068 "double-dashed-line",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2069 "shadow-etched-in",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2070 "shadow-etched-out",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2071 "shadow-etched-in-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2072 "shadow-etched-out-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2073 "shadow-double-etched-in",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2074 "shadow-double-etched-out",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2075 "shadow-double-etched-in-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2076 "shadow-double-etched-out-dash",
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2077 0,
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2078 };
96a27ec4e6c5 (xg_separator_p) <separator_names>: Move to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78781
diff changeset
2079
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2080 static int
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2081 xg_separator_p (const char *label)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2082 {
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
2083 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
2084 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
2085 && 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
2086 && 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
2087 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2088 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
2089
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2090 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
2091 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
2092 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
2093 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
2094 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2095 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
2096 {
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2097 /* 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
2098 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
2099 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
2100 ++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
2101 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
2102 }
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2103
5b50d76d9211 * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50272
diff changeset
2104 return 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2105 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2106
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2107 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
2108
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2109 /* 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
2110
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2111 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2112 xg_have_tear_offs (void)
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2113 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2114 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
2115 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2116
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2117 /* 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
2118 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
2119 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
2120 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
2121
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2122 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2123 tearoff_remove (GtkWidget *widget, gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2124 {
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2125 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
2126 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2127
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2128 /* 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
2129 xg_detached_menus count.
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2130 WIDGET is the GtkTearoffMenuItem.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2131 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
2132
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2133 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2134 tearoff_activate (GtkWidget *widget, gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2135 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2136 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
2137 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
2138 {
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2139 ++xg_detached_menus;
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2140 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
2141 "destroy",
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2142 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
2143 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2144 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2145
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2146
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2147 /* 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
2148 ITEM decribes the menu item.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2149 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
2150 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
2151 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
2152 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
2153 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
2154 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
2155 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
2156 *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
2157 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
2158
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2159 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
2160
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2161 static GtkWidget *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2162 xg_create_one_menuitem (widget_value *item,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2163 FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2164 GCallback select_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2165 GCallback highlight_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2166 xg_menu_cb_data *cl_data,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2167 GSList **group)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2168 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2169 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2170 char *utf8_key;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2171 GtkWidget *w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2172 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
2173
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2174 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
2175 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
2176
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2177 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
2178
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2179 if (utf8_label) g_free (utf8_label);
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2180 if (utf8_key) g_free (utf8_key);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2181
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2182 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
2183
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2184 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
2185
75040
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2186 cb_data->select_id = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2187 cb_data->help = item->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2188 cb_data->cl_data = cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2189 cb_data->call_data = item->call_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2190
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2191 g_signal_connect (G_OBJECT (w),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2192 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2193 G_CALLBACK (menuitem_destroy_callback),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2194 cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2195
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2196 /* 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
2197 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
2198
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2199 /* final item, not a submenu */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2200 if (item->call_data && ! item->contents)
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 if (select_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2203 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2204 = 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
2205 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2206
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2207 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2208 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2209
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2210 /* 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
2211 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
2212 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
2213 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
2214 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
2215 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
2216 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
2217 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
2218 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
2219 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
2220 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
2221 (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
2222 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
2223 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
2224 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
2225 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
2226
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2227 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
2228 not NULL.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2229
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2230 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
2231
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2232 static GtkWidget *
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2233 create_menus (widget_value *data,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2234 FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2235 GCallback select_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2236 GCallback deactivate_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2237 GCallback highlight_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2238 int pop_up_p,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2239 int menu_bar_p,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2240 int add_tearoff_p,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2241 GtkWidget *topmenu,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2242 xg_menu_cb_data *cl_data,
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
2243 const char *name)
49323
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 widget_value *item;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2246 GtkWidget *wmenu = topmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2247 GSList *group = NULL;
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 if (! topmenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2250 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2251 if (! menu_bar_p)
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2252 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2253 wmenu = gtk_menu_new ();
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2254 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
2255 /* 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
2256 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
2257 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
2258 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
2259 "enter-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2260 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
2261 NULL);
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2262 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
2263 "leave-notify-event",
37202e2fc35f (menuitem_highlight_callback): Invoked widget is the
Jan Djärv <jan.h.d@swipnet.se>
parents: 75009
diff changeset
2264 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
2265 NULL);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2266 }
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
2267 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
2268 {
695dbf5b3bb9 gtkutil.c (create_menus): Call gtk_widget_set_size_request for
Jan Djärv <jan.h.d@swipnet.se>
parents: 103916
diff changeset
2269 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
2270 /* 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
2271 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
2272 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
2273 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
2274 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
2275 }
49323
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 /* 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
2278 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
2279 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
2280 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
2281 G_CALLBACK (menu_destroy_callback), cl_data);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2282
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2283 if (name)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2284 gtk_widget_set_name (wmenu, name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2285
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2286 if (deactivate_cb)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2287 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
2288 "selection-done", deactivate_cb, 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2289 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2290
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2291 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
2292 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2293 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
2294 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
2295
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2296 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
2297 G_CALLBACK (tearoff_activate), 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2298 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2299
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2300 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
2301 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2302 GtkWidget *w;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2303
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2304 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
2305 && !xg_separator_p (item->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2306 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2307 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2308 /* 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
2309 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
2310 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2311 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
2312
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2313 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
2314 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
2315 gtk_widget_set_sensitive (w, FALSE);
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2316 if (utf8_label) g_free (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2317 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2318 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
2319 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2320 group = NULL;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2321 /* GTK only have one separator type. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2322 w = gtk_separator_menu_item_new ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2323 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2324 else
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 = xg_create_one_menuitem (item,
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 item->contents ? 0 : select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2329 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2330 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2331 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2332
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2333 /* 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
2334 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
2335 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
2336 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2337 GtkWidget *submenu = create_menus (item->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2338 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2339 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2340 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2341 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2342 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2343 0,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2344 add_tearoff_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2345 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2346 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2347 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2348 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
2349 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2350 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2351
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2352 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
2353 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
2354 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2355
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2356 return wmenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2357 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2358
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2359 /* 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
2360 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
2361 with some text and buttons.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2362 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
2363 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
2364 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
2365 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
2366 a dialog button is pressed.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2367 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
2368 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
2369 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
2370 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
2371
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2372 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
2373
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2374 GtkWidget *
109717
8949aad5e992 Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109668
diff changeset
2375 xg_create_widget (const char *type, const char *name, FRAME_PTR f, widget_value *val,
109364
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109141
diff changeset
2376 GCallback select_cb, GCallback deactivate_cb,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109141
diff changeset
2377 GCallback highlight_cb)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2378 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2379 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
2380 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
2381 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
2382
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2383 if (strcmp (type, "dialog") == 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2384 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2385 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
2386 xg_set_screen (w, f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2387 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
2388 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
2389 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
2390 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
2391 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
2392 }
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2393 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
2394 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2395 w = create_menus (val->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2396 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2397 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2398 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2399 highlight_cb,
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2400 pop_up_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2401 menu_bar_p,
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2402 menu_bar_p,
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2403 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2404 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2405 name);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2406
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2407 /* 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
2408 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
2409 if (pop_up_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2410 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2411 /* 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
2412 gtk_widget_realize (w);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2413 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
2414 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2415 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2416 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2417 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2418 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
2419 type);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2420 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2421
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2422 return w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2423 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2424
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
2425 /* 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
2426
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2427 static const char *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2428 xg_get_menu_item_label (GtkMenuItem *witem)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2429 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2430 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
2431 return gtk_label_get_label (wlabel);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2432 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2433
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
2434 /* 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
2435
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2436 static int
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2437 xg_item_label_same_p (GtkMenuItem *witem, const char *label)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2438 {
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
2439 int is_same = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2440 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
2441 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
2442
da6abcaef15c gtkutil.c: Check for NULL string before calling strcmp or strlen.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49468
diff changeset
2443 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
2444 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
2445 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
2446 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
2447
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2448 if (utf8_label) g_free (utf8_label);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2449
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2450 return is_same;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2451 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2452
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2453 /* 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
2454
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2455 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2456 xg_destroy_widgets (GList *list)
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 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2459
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2460 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
2461 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2462 GtkWidget *w = GTK_WIDGET (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2463
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
2464 /* 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
2465 gtk_widget_destroy (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2466 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2467 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2468
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2469 /* 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
2470 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
2471 *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
2472 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
2473 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
2474 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
2475 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
2476 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
2477 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
2478
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2479 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
2480
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2481 static void
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2482 xg_update_menubar (GtkWidget *menubar,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2483 FRAME_PTR f,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2484 GList **list,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2485 GList *iter,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2486 int pos,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2487 widget_value *val,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2488 GCallback select_cb,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2489 GCallback deactivate_cb,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2490 GCallback highlight_cb,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2491 xg_menu_cb_data *cl_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2492 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2493 if (! iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2494 return;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2495 else if (iter && ! val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2496 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2497 /* 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
2498 xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2499
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
2500 /* 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
2501 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
2502 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
2503 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2504 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2505 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2506 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2507 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2508 else if (! iter && val)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2509 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2510 /* 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
2511 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
2512 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
2513
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2514 /* All updated. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2515 val = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2516 iter = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2517 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2518 /* Below this neither iter or val is NULL */
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2519 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
2520 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2521 /* 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
2522 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2523 iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2524 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2525 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2526 else /* This item is changed. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2527 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2528 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
2529 GtkMenuItem *witem2 = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2530 int val_in_menubar = 0;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2531 int iter_in_new_menubar = 0;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2532 GList *iter2;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2533 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2534
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2535 /* 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
2536 for (iter2 = iter;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2537 iter2 && ! val_in_menubar;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2538 iter2 = g_list_next (iter2))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2539 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2540 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
2541 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
2542 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2543
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2544 /* 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
2545 specification for the new menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2546 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
2547 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
2548
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2549 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
2550 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2551 int nr = pos;
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2552
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2553 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2554 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2555 New: A C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2556 Remove B. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2557
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2558 g_object_ref (G_OBJECT (witem));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2559 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
2560 gtk_widget_destroy (GTK_WIDGET (witem));
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2561
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2562 /* 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
2563 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2564 *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
2565 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
2566 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2567 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
2568 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2569 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2570 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2571 New: A X C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2572 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
2573 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
2574 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
2575 (corresponds to B above).
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2576 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
2577 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
2578 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
2579 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
2580 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
2581 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
2582 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
2583 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
2584 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
2585 GtkWidget *submenu = gtk_menu_item_get_submenu (witem);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2586
50778
f30e6f029d65 * gtkutil.c (create_dialog, make_widget_for_menu_item)
Jan Djärv <jan.h.d@swipnet.se>
parents: 50521
diff changeset
2587 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
2588
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2589 /* 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
2590 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
2591 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
2592 /* 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
2593 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
2594
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2595 if (utf8_label) g_free (utf8_label);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2596 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2597 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2598 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2599 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2600 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
2601 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2602 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2603 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2604 New: A X B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2605 Insert X. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2606
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2607 int nr = pos;
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2608 GSList *group = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2609 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
2610 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2611 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2612 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2613 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2614 &group);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2615
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2616 /* 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
2617 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
2618 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
2619 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
2620 highlight_cb,
77511
1962a74982ce (xg_update_menubar, create_menus): Create empty
Jan Djärv <jan.h.d@swipnet.se>
parents: 76906
diff changeset
2621 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
2622 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
2623 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
2624 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
2625
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2626 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2627 *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
2628 while (nr-- > 0) iter = g_list_next (iter);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2629 iter = g_list_next (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2630 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2631 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2632 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2633 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
2634 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2635 int nr = pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2636 /* This corresponds to:
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2637 Current: A B C
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2638 New: A C B
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2639 Move C before B */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2640
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2641 g_object_ref (G_OBJECT (witem2));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2642 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
2643 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
2644 GTK_WIDGET (witem2), pos);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2645 g_object_unref (G_OBJECT (witem2));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2646
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2647 g_list_free (*list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2648 *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
2649 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
2650 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
2651 val = val->next;
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2652 ++pos;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2653 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2654 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2655
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2656 /* Update the rest of the menu bar. */
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2657 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
2658 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
2659 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2660
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2661 /* 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
2662 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
2663 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
2664 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
2665
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2666 static void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2667 xg_update_menu_item (widget_value *val,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2668 GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2669 GCallback select_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2670 GCallback highlight_cb,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2671 xg_menu_cb_data *cl_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2672 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2673 GtkWidget *wchild;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2674 GtkLabel *wlbl = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2675 GtkLabel *wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2676 char *utf8_label;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2677 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
2678 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
2679 const char *old_key = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2680 xg_menu_item_cb_data *cb_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2681
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2682 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
2683 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
2684 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
2685
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2686 /* 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
2687 if (GTK_IS_HBOX (wchild))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2688 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2689 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
2690
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2691 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2692 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2693 g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2694
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2695 if (! utf8_key)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2696 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2697 /* Remove the key and keep just the label. */
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2698 g_object_ref (G_OBJECT (wlbl));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2699 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
2700 gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (wlbl));
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2701 g_object_unref (G_OBJECT (wlbl));
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2702 wkey = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2703 }
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2704
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2705 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2706 else /* Just a label. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2707 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2708 wlbl = GTK_LABEL (wchild);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2709
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2710 /* 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
2711 if (utf8_key)
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 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
2714 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
2715
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2716 wlbl = GTK_LABEL (list->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2717 wkey = GTK_LABEL (list->next->data);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2718 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2719
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2720 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
2721 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
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
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2725
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
2726 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
2727 if (wlbl) old_label = gtk_label_get_label (wlbl);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2728
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
2729 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
2730 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
2731
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
2732 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
2733 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
2734
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2735 if (utf8_key) g_free (utf8_key);
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109726
diff changeset
2736 if (utf8_label) g_free (utf8_label);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2737
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2738 if (! val->enabled && gtk_widget_get_sensitive (w))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2739 gtk_widget_set_sensitive (w, FALSE);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2740 else if (val->enabled && ! gtk_widget_get_sensitive (w))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2741 gtk_widget_set_sensitive (w, TRUE);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2742
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2743 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
2744 XG_ITEM_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2745 if (cb_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 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
2748 cb_data->help = val->help;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2749 cb_data->cl_data = cl_data;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2750
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2751 /* 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
2752 if (val->call_data && ! val->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2753 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2754 /* 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
2755 if (! cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2756 cb_data->select_id
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2757 = 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
2758 select_cb, cb_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2759 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2760 else if (cb_data->select_id)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2761 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2762 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
2763 cb_data->select_id = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2764 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2765 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2766 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2767
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2768 /* 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
2769
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2770 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2771 xg_update_toggle_item (widget_value *val, GtkWidget *w)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2772 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2773 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
2774 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2775
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2776 /* 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
2777
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2778 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2779 xg_update_radio_item (widget_value *val, GtkWidget *w)
49323
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 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
2782 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2783
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2784 /* 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
2785 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
2786 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
2787 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
2788 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
2789 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
2790 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
2791 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
2792
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2793 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
2794 was NULL. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2795
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2796 static GtkWidget *
109139
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2797 xg_update_submenu (GtkWidget *submenu,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2798 FRAME_PTR f,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2799 widget_value *val,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2800 GCallback select_cb,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2801 GCallback deactivate_cb,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2802 GCallback highlight_cb,
c25c24812fb1 Convert declarations or definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109126
diff changeset
2803 xg_menu_cb_data *cl_data)
49323
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 GtkWidget *newsub = submenu;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2806 GList *list = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2807 GList *iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2808 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2809 int has_tearoff_p = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2810 GList *first_radio = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2811
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2812 if (submenu)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2813 list = gtk_container_get_children (GTK_CONTAINER (submenu));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2814
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2815 for (cur = val, iter = list;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2816 cur && iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2817 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
2818 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2819 GtkWidget *w = GTK_WIDGET (iter->data);
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 /* 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
2822 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
2823 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2824 has_tearoff_p = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2825 iter = g_list_next (iter);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2826 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
2827 else break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2828 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2829
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2830 /* 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
2831 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
2832 in GTK becomes correct. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2833 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
2834 first_radio = iter;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2835 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
2836 && ! GTK_IS_RADIO_MENU_ITEM (w))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2837 first_radio = 0;
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 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
2840 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2841 if (! xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2842 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2843 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2844 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
2845 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2846 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
2847 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2848 xg_update_toggle_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2849 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
2850 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2851 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
2852 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2853 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
2854 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2855 xg_update_radio_item (cur, w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2856 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
2857 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2858 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
2859 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2860 GtkMenuItem *witem = GTK_MENU_ITEM (w);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2861 GtkWidget *sub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2862
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2863 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
2864 xg_separator_p (cur->name))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2865 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2866
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2867 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
2868
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2869 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
2870 if (sub && ! cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2871 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2872 /* Not a submenu anymore. */
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2873 g_object_ref (G_OBJECT (sub));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
2874 remove_submenu (witem);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2875 gtk_widget_destroy (sub);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2876 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2877 else if (cur->contents)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2878 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2879 GtkWidget *nsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2880
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2881 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
2882 select_cb, deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2883 highlight_cb, cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2884
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2885 /* 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
2886 if (nsub != sub)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2887 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
2888 }
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 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2891 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2892 /* 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
2893 in SUBMENU. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2894 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2895 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2896 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2897
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2898 /* Remove widgets from first structual change. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2899 if (iter)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2900 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2901 /* 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
2902 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
2903 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
2904 else xg_destroy_widgets (iter);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2905 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2906
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2907 if (cur)
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 /* More items added. Create them. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2910 newsub = create_menus (cur,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2911 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2912 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2913 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2914 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2915 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2916 0,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2917 ! has_tearoff_p,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2918 submenu,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2919 cl_data,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2920 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2921 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2922
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2923 if (list) g_list_free (list);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2924
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2925 return newsub;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2926 }
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 /* Update the MENUBAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2929 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
2930 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
2931 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
2932 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
2933 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
2934 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
2935 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
2936
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2937 void
109364
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109141
diff changeset
2938 xg_modify_menubar_widgets (GtkWidget *menubar, FRAME_PTR f, widget_value *val,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109141
diff changeset
2939 int deep_p,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109141
diff changeset
2940 GCallback select_cb, GCallback deactivate_cb,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109141
diff changeset
2941 GCallback highlight_cb)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2942 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2943 xg_menu_cb_data *cl_data;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2944 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
2945
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2946 if (! list) return;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2947
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2948 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
2949 XG_FRAME_DATA);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2950
52981
54482f5ea7be Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2951 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
2952 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
2953
64783
0975467abc17 * gtkutil.c (xg_modify_menubar_widgets): Remove semicolon that
Jan Djärv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
2954 if (deep_p)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2955 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2956 widget_value *cur;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2957
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2958 /* 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
2959 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
2960 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
2961
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2962 /* 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
2963 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
2964
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2965 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
2966 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
2967 GList *iter;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2968 GtkWidget *sub = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2969 GtkWidget *newsub;
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2970 GtkMenuItem *witem = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2971
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2972 /* 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
2973 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
2974 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2975 witem = GTK_MENU_ITEM (iter->data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2976 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
2977 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2978 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
2979 break;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2980 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2981 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
2982
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2983 newsub = xg_update_submenu (sub,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2984 f,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2985 cur->contents,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2986 select_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2987 deactivate_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2988 highlight_cb,
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2989 cl_data);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2990 /* 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
2991 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
2992 newly created sub menu under witem. */
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
2993 if (newsub != sub && witem != 0)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2994 {
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2995 xg_set_screen (newsub, f);
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
2996 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
2997 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2998 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2999 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3000
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3001 g_list_free (list);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3002 gtk_widget_show_all (menubar);
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 /* 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
3006 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
3007
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3008 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3009 xg_update_frame_menubar (FRAME_PTR f)
49323
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 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
3012 GtkRequisition req;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3013
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3014 if (!x->menubar_widget || gtk_widget_get_mapped (x->menubar_widget))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3015 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3016
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
3017 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
3018 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
3019
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3020 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3021
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3022 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
3023 FALSE, FALSE, 0);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3024 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
3025
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3026 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
3027 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
3028 FRAME_MENUBAR_HEIGHT (f) = req.height;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3029 xg_height_or_width_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3030 UNBLOCK_INPUT;
50106
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
3031
5675d6a0080c (xg_update_frame_menubar): Add missing return value.
Andreas Schwab <schwab@suse.de>
parents: 50099
diff changeset
3032 return 1;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3033 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3034
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3035 /* 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
3036 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
3037
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3038 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3039 free_frame_menubar (FRAME_PTR f)
49323
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 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
3042
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3043 if (x->menubar_widget)
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 BLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3046
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3047 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
3048 /* 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
3049 the container. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3050 x->menubar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3051 FRAME_MENUBAR_HEIGHT (f) = 0;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3052 xg_height_or_width_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3053 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3054 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3055 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3056
109327
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3057 int
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3058 xg_event_is_for_menubar (FRAME_PTR f, XEvent *event)
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3059 {
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3060 struct x_output *x = f->output_data.x;
109332
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3061 GList *iter;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3062 GdkRectangle rec;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3063 GList *list;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3064 GdkDisplay *gdpy;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3065 GdkWindow *gw;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3066 GdkEvent gevent;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3067 GtkWidget *gwdesc;
109327
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3068
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3069 if (! x->menubar_widget) return 0;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3070
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3071 if (! (event->xbutton.x >= 0
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3072 && event->xbutton.x < FRAME_PIXEL_WIDTH (f)
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3073 && event->xbutton.y >= 0
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3074 && event->xbutton.y < f->output_data.x->menubar_height
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3075 && event->xbutton.same_screen))
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3076 return 0;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3077
109332
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3078 gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3079 gw = gdk_xid_table_lookup_for_display (gdpy, event->xbutton.window);
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3080 if (! gw) return 0;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3081 gevent.any.window = gw;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3082 gwdesc = gtk_get_event_widget (&gevent);
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3083 if (! gwdesc) return 0;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3084 if (! GTK_IS_MENU_BAR (gwdesc)
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3085 && ! GTK_IS_MENU_ITEM (gwdesc)
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3086 && ! gtk_widget_is_ancestor (x->menubar_widget, gwdesc))
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3087 return 0;
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3088
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3089 list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget));
109327
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3090 if (! list) return 0;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3091 rec.x = event->xbutton.x;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3092 rec.y = event->xbutton.y;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3093 rec.width = 1;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3094 rec.height = 1;
109332
507549811e3e * gtkutil.c (xg_event_is_for_menubar): Also check that event window
Jan D <jan.h.d@swipnet.se>
parents: 109327
diff changeset
3095
109327
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3096 for (iter = list ; iter; iter = g_list_next (iter))
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3097 {
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3098 GtkWidget *w = GTK_WIDGET (iter->data);
109454
514fed5c0ded * gtkutil.c (xg_frame_resized): GTK_IS_MAPPED => gtk_widget_get_mapped, for Gtk 3.0
Jan D <jan.h.d@swipnet.se>
parents: 109452
diff changeset
3099 if (gtk_widget_get_mapped (w) && gtk_widget_intersect (w, &rec, NULL))
109327
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3100 break;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3101 }
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3102 g_list_free (list);
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3103 return iter == 0 ? 0 : 1;
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3104 }
60266cf487b0 Fix menus as per bug 6499 and 6608.
Jan D <jan.h.d@swipnet.se>
parents: 107219
diff changeset
3105
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3106
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3107
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3108 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3109 Scroll bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3110 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3111
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3112
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3113 /* 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
3114 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
3115
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3116 int xg_ignore_gtk_scrollbar;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3117
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3118 /* 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
3119 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
3120 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
3121
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3122 static struct
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3123 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3124 GtkWidget **widgets;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3125 int max_size;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3126 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
3127 } id_to_widget;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3128
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3129 /* 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
3130
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3131 #define ID_TO_WIDGET_INCR 32
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 /* 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
3134
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3135 static int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3136 xg_store_widget_in_map (GtkWidget *w)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3137 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3138 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3139
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3140 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
3141 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3142 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
3143
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3144 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
3145 sizeof (GtkWidget *)*new_size);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3146
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3147 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
3148 id_to_widget.widgets[i] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3149 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
3150 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3151
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3152 /* 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
3153 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
3154 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
3155 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
3156 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3157 if (! id_to_widget.widgets[i])
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3158 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3159 id_to_widget.widgets[i] = w;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3160 ++id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3161
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3162 return i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3163 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3164 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3165
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3166 /* Should never end up here */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3167 abort ();
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3168 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3169
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3170 /* 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
3171 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
3172
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3173 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3174 xg_remove_widget_from_map (int idx)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3175 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3176 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
3177 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3178 id_to_widget.widgets[idx] = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3179 --id_to_widget.used;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3180 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3181 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3182
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3183 /* 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
3184
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3185 static GtkWidget *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3186 xg_get_widget_from_map (int idx)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3187 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3188 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
3189 return id_to_widget.widgets[idx];
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3190
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3191 return 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3192 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3193
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3194 /* 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
3195 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
3196
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3197 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3198 xg_get_scroll_id_for_window (Display *dpy, Window wid)
50063
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3199 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3200 int idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3201 GtkWidget *w;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3202
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3203 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
3204
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3205 if (w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3206 {
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3207 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
3208 if (id_to_widget.widgets[idx] == w)
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3209 return idx;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3210 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3211
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3212 return -1;
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3213 }
464ffd8b9e33 Another fix for BadGC.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50059
diff changeset
3214
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3215 /* 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
3216 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
3217 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
3218
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3219 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3220 xg_gtk_scroll_destroy (GtkWidget *widget, gpointer data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3221 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3222 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
3223 xg_remove_widget_from_map (id);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3224 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3225
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3226 /* 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
3227 in BAR.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3228 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
3229 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
3230 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
3231 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
3232 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
3233
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3234 void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3235 xg_create_scroll_bar (FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3236 struct scroll_bar *bar,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3237 GCallback scroll_callback,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3238 GCallback end_callback,
109717
8949aad5e992 Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109668
diff changeset
3239 const char *scroll_bar_name)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3240 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3241 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
3242 GtkWidget *webox;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3243 GtkObject *vadj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3244 int scroll_id;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3245
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3246 /* 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
3247 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
3248 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
3249 0.1, 0.1, 0.1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3250
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3251 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
3252 webox = gtk_event_box_new ();
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3253 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
3254 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
3255 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
3256
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3257 scroll_id = xg_store_widget_in_map (wscroll);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3258
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3259 /* 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
3260 g_signal_connect (G_OBJECT (wscroll),
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3261 "destroy",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3262 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
3263 (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
3264 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
3265 "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
3266 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
3267 (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
3268 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
3269 "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
3270 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
3271 (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
3272
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3273 /* 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
3274 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
3275 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
3276 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
3277 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
3278 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
3279 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
3280 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
3281
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3282
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3283 /* 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
3284 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
3285
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3286 bar->x_window = scroll_id;
49323
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
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3289 /* 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
3290
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3291 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3292 xg_remove_scroll_bar (FRAME_PTR f, int scrollbar_id)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3293 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3294 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
3295 if (w)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3296 {
57597
754a6433f048 * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose,
Jan Djärv <jan.h.d@swipnet.se>
parents: 57575
diff changeset
3297 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
3298 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
3299 gtk_widget_destroy (wparent);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3300 SET_FRAME_GARBAGED (f);
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 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3303
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3304 /* 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
3305 in frame F.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3306 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
3307 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
3308
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3309 void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3310 xg_update_scrollbar_pos (FRAME_PTR f,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3311 int scrollbar_id,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3312 int top,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3313 int left,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3314 int width,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3315 int height)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3316 {
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3317
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3318 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
3319
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3320 if (wscroll)
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3321 {
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
3322 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
3323 GtkWidget *wparent = gtk_widget_get_parent (wscroll);
109040
98796fa1a7f8 src/gtkutil.c (xg_update_scrollbar_pos): Avoid C99 mid-block variable declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 109037
diff changeset
3324 gint msl;
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3325
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3326 /* Clear out old position. */
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3327 int oldx = -1, oldy = -1, oldw, oldh;
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3328 if (gtk_widget_get_parent (wparent) == wfixed)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3329 {
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3330 gtk_container_child_get (GTK_CONTAINER (wfixed), wparent,
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3331 "x", &oldx, "y", &oldy, NULL);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3332 gtk_widget_get_size_request (wscroll, &oldw, &oldh);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3333 }
55342
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3334
44d086f5e08a * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
Jan Djärv <jan.h.d@swipnet.se>
parents: 53275
diff changeset
3335 /* 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
3336 gtk_fixed_move (GTK_FIXED (wfixed), wparent, left, top);
109037
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3337 gtk_widget_style_get (wscroll, "min-slider-length", &msl, NULL);
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3338 if (msl > height)
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3339 {
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3340 /* No room. Hide scroll bar as some themes output a warning if
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3341 the height is less than the min size. */
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3342 gtk_widget_hide (wparent);
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3343 gtk_widget_hide (wscroll);
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3344 }
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3345 else
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3346 {
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3347 gtk_widget_show_all (wparent);
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3348 gtk_widget_set_size_request (wscroll, width, height);
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3349 }
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3350 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
3351 gdk_window_process_all_updates ();
109037
3e9a832a5533 Hide scroll bar when window is too small to avoid Gtk+ warning.
Jan D. <jan.h.d@swipnet.se>
parents: 108315
diff changeset
3352 if (oldx != -1 && oldw > 0 && oldh > 0)
106720
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3353 {
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3354 /* 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
3355 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
3356 above. */
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3357 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
3358 FRAME_X_WINDOW (f),
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3359 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
3360 }
3db7e57ee4e9 Handle change of internal-border width when maximized.
Jan D. <jan.h.d@swipnet.se>
parents: 106559
diff changeset
3361
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
3362 /* 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
3363 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
3364 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
3365
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
3366 x_sync (f);
49572
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3367 SET_FRAME_GARBAGED (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3368 cancel_mouse_face (f);
f492ad3945ad Fix memory leak.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49531
diff changeset
3369 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3370 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3371
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3372 /* 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
3373 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
3374
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3375 void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3376 xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3377 int portion,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3378 int position,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3379 int whole)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3380 {
86161
3408ab8b4152 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85938
diff changeset
3381 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
3382
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3383 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
3384
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
3385 if (wscroll && NILP (bar->dragging))
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3386 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3387 GtkAdjustment *adj;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3388 gdouble shown;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3389 gdouble top;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3390 int size, value;
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3391 int new_step;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3392 int changed = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3393
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3394 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
3395
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
3396 /* 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
3397 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
3398 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
3399 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
3400 /* 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
3401 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
3402 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
3403
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3404 if (whole <= 0)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3405 top = 0, shown = 1;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3406 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3407 {
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3408 top = (gdouble) position / whole;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3409 shown = (gdouble) portion / whole;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3410 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3411
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3412 size = shown * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3413 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
3414 size = max (size, 1);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3415
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3416 value = top * XG_SB_RANGE;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3417 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
3418 value = max (value, XG_SB_MIN);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3419
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3420 /* 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
3421 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
3422
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3423 if ((int) gtk_adjustment_get_page_size (adj) != size
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3424 || (int) gtk_adjustment_get_step_increment (adj) != 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
3425 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3426 gtk_adjustment_set_page_size (adj, size);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3427 gtk_adjustment_set_step_increment (adj, 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
3428 /* Assume a page increment is about 95% of the page size */
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3429 gtk_adjustment_set_page_increment (adj,(int) (0.95*size));
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3430 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
3431 }
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
3432
50270
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3433 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
3434 {
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3435 BLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3436
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3437 /* 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
3438 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
3439 xg_ignore_gtk_scrollbar = 1;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3440
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3441 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
3442 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
3443 else if (changed)
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3444 gtk_adjustment_changed (adj);
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3445
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3446 xg_ignore_gtk_scrollbar = 0;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3447
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3448 UNBLOCK_INPUT;
fa50953c02dc Finally (?) fix flicker in scroll bar.
Jan Djärv <jan.h.d@swipnet.se>
parents: 50192
diff changeset
3449 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3450 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3451 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3452
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3453 /* 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
3454 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
3455 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
3456 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
3457
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3458 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
3459
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3460 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3461 xg_event_is_for_scrollbar (FRAME_PTR f, XEvent *event)
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3462 {
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3463 int retval = 0;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3464
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
3465 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
3466 {
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3467 /* 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
3468 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
3469 retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL)
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3470 != gtk_widget_get_window (f->output_data.x->edit_widget);
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3471 }
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
3472 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
3473 && ((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
3474 || event->type == MotionNotify))
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3475 {
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3476 /* If we are releasing or moving the scroll bar, it has the grab. */
107997
d94009e7a0cc gtkutils.c (xg_event_is_for_scrollbar): Check if grabbed widget is a scrollbar.
Jan D. <jan.h.d@swipnet.se>
parents: 107891
diff changeset
3477 GtkWidget *w = gtk_grab_get_current ();
d94009e7a0cc gtkutils.c (xg_event_is_for_scrollbar): Check if grabbed widget is a scrollbar.
Jan D. <jan.h.d@swipnet.se>
parents: 107891
diff changeset
3478 retval = w != 0 && GTK_IS_SCROLLBAR (w);
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3479 }
106549
3acd32c3e0ac gtkutil.c: Scroll bar thumb not updated properly (bug #5177).
Jan Djärv <jan.h.d@swipnet.se>
parents: 106512
diff changeset
3480
105880
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3481 return retval;
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3482 }
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3483
5910e0380daf Fix bug #4870, issues 3 and 4.
Jan Djärv <jan.h.d@swipnet.se>
parents: 105693
diff changeset
3484
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3485
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3486 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3487 Tool bar functions
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3488 ***********************************************************************/
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3489 /* 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
3490 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
3491 the GtkImage with a new image. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3492 #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
3493
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3494 /* 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
3495 get them. */
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3496 #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
3497
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3498 /* 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
3499 #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
3500
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3501 /* 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
3502 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
3503 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
3504 #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
3505
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3506 /* 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
3507 stock items. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3508 #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
3509
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3510 /* 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
3511 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
3512 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
3513 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
3514
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3515 static gboolean
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3516 xg_tool_bar_button_cb (GtkWidget *widget,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3517 GdkEventButton *event,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3518 gpointer user_data)
68874
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3519 {
73389
7b5c0104efb0 * gtkutil.c (get_utf8_string): Remove warnings with casts.
Jan Djärv <jan.h.d@swipnet.se>
parents: 73066
diff changeset
3520 /* 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
3521 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
3522 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
3523 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
3524 }
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3525
8ccdd5aee32d * gtkutil.c (xg_tool_bar_button_cb): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 68651
diff changeset
3526
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
3527 /* 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
3528 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
3529 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
3530 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
3531
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3532 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3533 xg_tool_bar_callback (GtkWidget *w, gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3534 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3535 /* 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
3536 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
3537 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
3538 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
3539
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3540 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
3541 Lisp_Object key, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3542 struct input_event event;
51569
e7bd8581e306 (xg_tool_bar_callback): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51432
diff changeset
3543 EVENT_INIT (event);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3544
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3545 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
3546 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3547
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3548 idx *= TOOL_BAR_ITEM_NSLOTS;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
3549
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3550 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
3551 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
3552
2fcf45c12927 (update_frame_tool_bar): Use -1 as index
Jan Djärv <jan.h.d@swipnet.se>
parents: 78260
diff changeset
3553 /* 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
3554 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
3555 event.kind = TOOL_BAR_EVENT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3556 event.frame_or_window = frame;
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3557 event.arg = frame;
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3558 kbd_buffer_store_event (&event);
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3559
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3560 event.kind = TOOL_BAR_EVENT;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3561 event.frame_or_window = frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3562 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
3563 /* 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
3564 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
3565 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
3566 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
3567 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
3568
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
3569 /* 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
3570 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
3571 Fx_focus_frame (frame);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3572 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3573
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3574 /* 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
3575 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
3576 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
3577 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
3578 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
3579 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
3580
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3581 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3582 xg_tool_bar_proxy_callback (GtkWidget *w, gpointer client_data)
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3583 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3584 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
3585 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
3586 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
3587 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3588
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3589
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3590 static gboolean
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 109067
diff changeset
3591 xg_tool_bar_help_callback (GtkWidget *w,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 109067
diff changeset
3592 GdkEventCrossing *event,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 109067
diff changeset
3593 gpointer 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
3594
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3595 /* 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
3596 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
3597
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3598 static gboolean
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3599 xg_tool_bar_proxy_help_callback (GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3600 GdkEventCrossing *event,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3601 gpointer 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
3602 {
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3603 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
3604 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
3605
106512
471e6932ea09 (xg_tool_bar_proxy_help_callback): Fix missing return.
Andreas Schwab <schwab@linux-m68k.org>
parents: 106186
diff changeset
3606 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
3607 }
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3608
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3609 static GtkWidget *
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3610 xg_get_tool_bar_widgets (GtkWidget *vb, GtkWidget **wimage)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3611 {
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3612 GList *clist = gtk_container_get_children (GTK_CONTAINER (vb));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3613 GtkWidget *c1 = (GtkWidget *) clist->data;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3614 GtkWidget *c2 = (GtkWidget *) clist->next->data;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3615 *wimage = GTK_IS_IMAGE (c1) ? c1 : c2;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3616 g_list_free (clist);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3617 return GTK_IS_LABEL (c1) ? c1 : c2;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3618 }
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3619
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3620
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3621 /* 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
3622 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
3623 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
3624 blank. */
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3625
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3626 static gboolean
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3627 xg_tool_bar_menu_proxy (GtkToolItem *toolitem, gpointer 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
3628 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3629 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
3630 GtkButton *wbutton = GTK_BUTTON (gtk_bin_get_child (GTK_BIN (weventbox)));
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3631 GtkWidget *vb = gtk_bin_get_child (GTK_BIN (wbutton));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3632 GtkWidget *c1;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3633 GtkLabel *wlbl = GTK_LABEL (xg_get_tool_bar_widgets (vb, &c1));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3634 GtkImage *wimage = GTK_IMAGE (c1);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3635 GtkWidget *wmenuitem = gtk_image_menu_item_new_with_label
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3636 (gtk_label_get_text (wlbl));
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3637 GtkWidget *wmenuimage;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3638
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3639
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3640 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
3641 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
3642 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
3643 else
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3644 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3645 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
3646 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
3647
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3648 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
3649 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3650 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
3651 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
3652 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
3653 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3654 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
3655 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3656 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
3657 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
3658 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
3659 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
3660 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3661 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
3662 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3663 gint width, height;
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3664
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3665 if (settings &&
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3666 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
3667 &width, &height))
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3668 {
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3669 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
3670
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3671 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
3672 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
3673 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
3674
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3675 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
3676 }
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
3677 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
3678 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3679 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
3680 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
3681 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3682 }
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3683 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
3684 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3685 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
3686 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
3687
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3688 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
3689 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
3690 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
3691 }
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3692 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
3693 {
7c710af0ae5e (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
Jan Djärv <jan.h.d@swipnet.se>
parents: 78809
diff changeset
3694 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
3695 abort ();
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3696 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3697 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3698 if (wmenuimage)
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3699 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
3700
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3701 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
3702 "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
3703 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
3704 user_data);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3705
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3706
75009
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3707 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
3708 (gpointer) wbutton);
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3709 gtk_tool_item_set_proxy_menu_item (toolitem, "Emacs toolbar item", wmenuitem);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3710 gtk_widget_set_sensitive (wmenuitem,
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3711 gtk_widget_get_sensitive (GTK_WIDGET (wbutton)));
103673
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3712
34f3338fd2bf * gtkutil.c (xg_tool_bar_proxy_help_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103665
diff changeset
3713 /* 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
3714 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
3715 "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
3716 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
3717 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
3718 "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
3719 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
3720 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
3721 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
3722 "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
3723 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
3724 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
3725
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3726 return TRUE;
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3727 }
6ec19c8cca02 (update_frame_tool_bar): Connect create-menu-proxy with
Jan Djärv <jan.h.d@swipnet.se>
parents: 74990
diff changeset
3728
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3729 /* 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
3730 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
3731 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3732 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
3733 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3734 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
3735
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3736 static void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3737 xg_tool_bar_detach_callback (GtkHandleBox *wbox,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3738 GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3739 gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3740 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3741 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
3742 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
3743
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
3744 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
3745 NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3746
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3747 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3748 {
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3749 GtkRequisition req, req2;
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3750 FRAME_X_OUTPUT (f)->toolbar_detached = 1;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3751 gtk_widget_size_request (GTK_WIDGET (wbox), &req);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3752 gtk_widget_size_request (w, &req2);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3753 req.width -= req2.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3754 req.height -= req2.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3755 if (FRAME_TOOLBAR_TOP_HEIGHT (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3756 FRAME_TOOLBAR_TOP_HEIGHT (f) = req.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3757 else if (FRAME_TOOLBAR_BOTTOM_HEIGHT (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3758 FRAME_TOOLBAR_BOTTOM_HEIGHT (f) = req.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3759 else if (FRAME_TOOLBAR_RIGHT_WIDTH (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3760 FRAME_TOOLBAR_RIGHT_WIDTH (f) = req.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3761 else if (FRAME_TOOLBAR_LEFT_WIDTH (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3762 FRAME_TOOLBAR_LEFT_WIDTH (f) = req.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3763 xg_height_or_width_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3764 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3765 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3766
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3767 /* 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
3768 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
3769 are correctly calculated.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3770 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
3771 W is the tool bar widget.
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3772 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
3773
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3774 static void
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3775 xg_tool_bar_attach_callback (GtkHandleBox *wbox,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3776 GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3777 gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3778 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3779 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
3780 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
3781
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3782 if (f)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3783 {
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3784 GtkRequisition req, req2;
59420
eb72706060ad * xterm.h (struct x_output): New member, toolbar_detached.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
3785 FRAME_X_OUTPUT (f)->toolbar_detached = 0;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3786 gtk_widget_size_request (GTK_WIDGET (wbox), &req);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3787 gtk_widget_size_request (w, &req2);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3788 req.width += req2.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3789 req.height += req2.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3790 if (FRAME_TOOLBAR_TOP_HEIGHT (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3791 FRAME_TOOLBAR_TOP_HEIGHT (f) = req.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3792 else if (FRAME_TOOLBAR_BOTTOM_HEIGHT (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3793 FRAME_TOOLBAR_BOTTOM_HEIGHT (f) = req.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3794 else if (FRAME_TOOLBAR_RIGHT_WIDTH (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3795 FRAME_TOOLBAR_RIGHT_WIDTH (f) = req.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3796 else if (FRAME_TOOLBAR_LEFT_WIDTH (f) != 0)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3797 FRAME_TOOLBAR_LEFT_WIDTH (f) = req.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3798 xg_height_or_width_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3799 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3800 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3801
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3802 /* 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
3803 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
3804 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
3805 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
3806 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
3807 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
3808
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3809 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
3810
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3811 static gboolean
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3812 xg_tool_bar_help_callback (GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3813 GdkEventCrossing *event,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3814 gpointer client_data)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3815 {
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59102
diff changeset
3816 /* 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
3817 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
3818 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
3819 Lisp_Object help, frame;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3820
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3821 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
3822 return FALSE;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3823
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3824 if (event->type == GDK_ENTER_NOTIFY)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3825 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3826 idx *= TOOL_BAR_ITEM_NSLOTS;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3827 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
3828
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3829 if (NILP (help))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3830 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
3831 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3832 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3833 help = Qnil;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3834
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3835 XSETFRAME (frame, f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3836 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
3837
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3838 return FALSE;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3839 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3840
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3841
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3842 /* 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
3843 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
3844 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
3845 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
3846 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
3847 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
3848 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
3849
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3850 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
3851
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3852 static gboolean
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3853 xg_tool_bar_item_expose_callback (GtkWidget *w,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3854 GdkEventExpose *event,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
3855 gpointer 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
3856 {
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3857 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
3858
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3859 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
3860
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3861 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
3862 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
3863
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52981
diff changeset
3864 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
3865 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
3866
50333
60da21fd968b * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
Jan Djärv <jan.h.d@swipnet.se>
parents: 50318
diff changeset
3867 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
3868 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
3869
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3870 return FALSE;
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3871 }
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3872
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3873 #ifdef HAVE_GTK_ORIENTABLE_SET_ORIENTATION
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3874 #define toolbar_set_orientation(w, o) \
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3875 gtk_orientable_set_orientation (GTK_ORIENTABLE (w), o)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3876 #else
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3877 #define toolbar_set_orientation(w, o) \
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3878 gtk_toolbar_set_orientation (GTK_TOOLBAR (w), o)
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3879 #endif
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
3880
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3881 /* Attach a tool bar to frame F. */
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3882
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3883 static void
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3884 xg_pack_tool_bar (FRAME_PTR f, Lisp_Object pos)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3885 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3886 struct x_output *x = f->output_data.x;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3887 int into_hbox = EQ (pos, Qleft) || EQ (pos, Qright);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3888
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3889 toolbar_set_orientation (x->toolbar_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3890 into_hbox
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3891 ? GTK_ORIENTATION_VERTICAL
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3892 : GTK_ORIENTATION_HORIZONTAL);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3893 if (!x->handlebox_widget)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3894 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3895 x->handlebox_widget = gtk_handle_box_new ();
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3896 g_signal_connect (G_OBJECT (x->handlebox_widget), "child-detached",
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3897 G_CALLBACK (xg_tool_bar_detach_callback), f);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3898 g_signal_connect (G_OBJECT (x->handlebox_widget), "child-attached",
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3899 G_CALLBACK (xg_tool_bar_attach_callback), f);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3900 gtk_container_add (GTK_CONTAINER (x->handlebox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3901 x->toolbar_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3902 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3903
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3904 if (into_hbox)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3905 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3906 gtk_box_pack_start (GTK_BOX (x->hbox_widget), x->handlebox_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3907 FALSE, FALSE, 0);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3908
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3909 if (EQ (pos, Qleft))
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3910 gtk_box_reorder_child (GTK_BOX (x->hbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3911 x->handlebox_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3912 0);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3913 x->toolbar_in_hbox = 1;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3914 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3915 else
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3916 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3917 int vbox_pos = x->menubar_widget ? 1 : 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3918 gtk_box_pack_start (GTK_BOX (x->vbox_widget), x->handlebox_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3919 FALSE, FALSE, 0);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3920
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3921 if (EQ (pos, Qtop))
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3922 gtk_box_reorder_child (GTK_BOX (x->vbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3923 x->handlebox_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3924 vbox_pos);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3925 x->toolbar_in_hbox = 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3926 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3927 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3928
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3929 /* Create a tool bar for frame F. */
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
3930
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3931 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3932 xg_create_tool_bar (FRAME_PTR f)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3933 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3934 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
3935
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3936 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
3937 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
3938
49826
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3939 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
3940
e99f1a981a3b * gtkutil.c (xg_tool_bar_expose_callback): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 49600
diff changeset
3941 gtk_toolbar_set_style (GTK_TOOLBAR (x->toolbar_widget), GTK_TOOLBAR_ICONS);
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3942 toolbar_set_orientation (x->toolbar_widget, GTK_ORIENTATION_HORIZONTAL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3943 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
3944
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
3945
39b38c867ca4 (xg_resize_outer_widget): Only do one of set_geometry or
Jan Djärv <jan.h.d@swipnet.se>
parents: 91632
diff changeset
3946 #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
3947
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3948 /* 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
3949 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
3950
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3951 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
3952 find_rtl_image (FRAME_PTR f, Lisp_Object image, Lisp_Object rtl)
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3953 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3954 int i;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3955 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
3956 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
3957 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
3958
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3959 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
3960
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3961 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
3962 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3963 Lisp_Object rtl_image = PROP (TOOL_BAR_ITEM_IMAGES);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
3964 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
3965 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3966 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
3967 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
3968 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
3969 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3970 image = rtl_image;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3971 break;
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 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
3974 }
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 return image;
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
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3979 static GtkToolItem *
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3980 xg_make_tool_item (FRAME_PTR f,
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3981 GtkWidget *wimage,
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3982 GtkWidget **wbutton,
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109717
diff changeset
3983 const char *label,
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3984 int i)
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3985 {
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3986 GtkToolItem *ti = gtk_tool_item_new ();
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3987 Lisp_Object style = Ftool_bar_get_system_style ();
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3988 int both_horiz = EQ (style, Qboth_horiz);
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3989 int text_image = EQ (style, Qtext_image_horiz);
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3990
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3991 GtkWidget *vb = both_horiz || text_image
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3992 ? gtk_hbox_new (FALSE, 0) : gtk_vbox_new (FALSE, 0);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3993 GtkWidget *wb = gtk_button_new ();
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3994 GtkWidget *weventbox = gtk_event_box_new ();
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
3995
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
3996 if (wimage && ! text_image)
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3997 gtk_box_pack_start (GTK_BOX (vb), wimage, TRUE, TRUE, 0);
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3998
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
3999 gtk_box_pack_start (GTK_BOX (vb), gtk_label_new (label), TRUE, TRUE, 0);
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4000
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4001 if (wimage && text_image)
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4002 gtk_box_pack_start (GTK_BOX (vb), wimage, TRUE, TRUE, 0);
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4003
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4004 gtk_button_set_focus_on_click (GTK_BUTTON (wb), FALSE);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4005 gtk_button_set_relief (GTK_BUTTON (wb), GTK_RELIEF_NONE);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4006 gtk_container_add (GTK_CONTAINER (wb), vb);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4007 gtk_container_add (GTK_CONTAINER (weventbox), wb);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4008 gtk_container_add (GTK_CONTAINER (ti), weventbox);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4009
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4010 if (wimage)
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4011 {
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4012 /* The EMACS_INT cast avoids a warning. */
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4013 g_signal_connect (G_OBJECT (ti), "create-menu-proxy",
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4014 G_CALLBACK (xg_tool_bar_menu_proxy),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4015 (gpointer) (EMACS_INT) i);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4016
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4017 g_signal_connect (G_OBJECT (wb), "clicked",
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4018 G_CALLBACK (xg_tool_bar_callback),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4019 (gpointer) (EMACS_INT) i);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4020
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4021 g_object_set_data (G_OBJECT (weventbox), XG_FRAME_DATA, (gpointer)f);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4022
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4023 /* Catch expose events to overcome an annoying redraw bug, see
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4024 comment for xg_tool_bar_item_expose_callback. */
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4025 g_signal_connect (G_OBJECT (ti),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4026 "expose-event",
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4027 G_CALLBACK (xg_tool_bar_item_expose_callback),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4028 0);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4029
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4030 gtk_tool_item_set_homogeneous (ti, FALSE);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4031
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4032 /* Callback to save modifyer mask (Shift/Control, etc). GTK makes
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4033 no distinction based on modifiers in the activate callback,
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4034 so we have to do it ourselves. */
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4035 g_signal_connect (wb, "button-release-event",
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4036 G_CALLBACK (xg_tool_bar_button_cb),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4037 NULL);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4038
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4039 g_object_set_data (G_OBJECT (wb), XG_FRAME_DATA, (gpointer)f);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4040
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4041 /* Use enter/leave notify to show help. We use the events
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4042 rather than the GtkButton specific signals "enter" and
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4043 "leave", so we can have only one callback. The event
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4044 will tell us what kind of event it is. */
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4045 /* The EMACS_INT cast avoids a warning. */
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4046 g_signal_connect (G_OBJECT (weventbox),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4047 "enter-notify-event",
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4048 G_CALLBACK (xg_tool_bar_help_callback),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4049 (gpointer) (EMACS_INT) i);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4050 g_signal_connect (G_OBJECT (weventbox),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4051 "leave-notify-event",
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4052 G_CALLBACK (xg_tool_bar_help_callback),
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4053 (gpointer) (EMACS_INT) i);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4054 }
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4055
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4056 if (wbutton) *wbutton = wb;
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4057
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4058 return ti;
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4059 }
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4060
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4061 static void
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4062 xg_show_toolbar_item (GtkToolItem *ti)
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4063 {
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4064 Lisp_Object style = Ftool_bar_get_system_style ();
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4065 int both_horiz = EQ (style, Qboth_horiz);
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4066 int text_image = EQ (style, Qtext_image_horiz);
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4067
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4068 int horiz = both_horiz || text_image;
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4069 int show_label = ! EQ (style, Qimage);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4070 int show_image = ! EQ (style, Qtext);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4071
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4072 GtkWidget *weventbox = gtk_bin_get_child (GTK_BIN (ti));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4073 GtkWidget *wbutton = gtk_bin_get_child (GTK_BIN (weventbox));
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4074 GtkWidget *vb = gtk_bin_get_child (GTK_BIN (wbutton));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4075 GtkWidget *wimage;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4076 GtkWidget *wlbl = xg_get_tool_bar_widgets (vb, &wimage);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4077 GtkWidget *new_box = NULL;
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4078
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4079 if (GTK_IS_VBOX (vb) && horiz)
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4080 new_box = gtk_hbox_new (FALSE, 0);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4081 else if (GTK_IS_HBOX (vb) && !horiz && show_label && show_image)
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4082 new_box = gtk_vbox_new (FALSE, 0);
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4083
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4084 if (!new_box && horiz)
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4085 gtk_box_reorder_child (GTK_BOX (vb), wlbl, text_image ? 0 : 1);
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4086 else if (new_box)
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4087 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4088 g_object_ref (G_OBJECT (wimage));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4089 g_object_ref (G_OBJECT (wlbl));
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4090 gtk_container_remove (GTK_CONTAINER (vb), wimage);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4091 gtk_container_remove (GTK_CONTAINER (vb), wlbl);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4092 gtk_widget_destroy (GTK_WIDGET (vb));
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4093 if (! text_image)
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4094 gtk_box_pack_start (GTK_BOX (new_box), wimage, TRUE, TRUE, 0);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4095 gtk_box_pack_start (GTK_BOX (new_box), wlbl, TRUE, TRUE, 0);
109566
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4096 if (text_image)
d03bc4a3fced Add tool bar style text-image-horiz (text to the left of the image).
Jan D. <jan.h.d@swipnet.se>
parents: 109454
diff changeset
4097 gtk_box_pack_start (GTK_BOX (new_box), wimage, TRUE, TRUE, 0);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4098 gtk_container_add (GTK_CONTAINER (wbutton), new_box);
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4099 g_object_unref (G_OBJECT (wimage));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4100 g_object_unref (G_OBJECT (wlbl));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4101 vb = new_box;
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4102 }
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4103
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4104 if (show_label) gtk_widget_show (wlbl);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4105 else gtk_widget_hide (wlbl);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4106 if (show_image) gtk_widget_show (wimage);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4107 else gtk_widget_hide (wimage);
108315
8bb62bdbd80a Fix bug #6139, text is briefly shown in tool bar on startup.
Jan D <jan.h.d@swipnet.se>
parents: 108082
diff changeset
4108 gtk_widget_show (GTK_WIDGET (weventbox));
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4109 gtk_widget_show (GTK_WIDGET (vb));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4110 gtk_widget_show (GTK_WIDGET (wbutton));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4111 gtk_widget_show (GTK_WIDGET (ti));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4112 }
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4113
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4114 static int
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4115 xg_update_tool_bar_sizes (FRAME_PTR f)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4116 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4117 struct x_output *x = f->output_data.x;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4118 GtkRequisition req;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4119 int nl = 0, nr = 0, nt = 0, nb = 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4120
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4121 gtk_widget_size_request (GTK_WIDGET (x->handlebox_widget), &req);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4122 if (x->toolbar_in_hbox)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4123 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4124 int pos;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4125 gtk_container_child_get (GTK_CONTAINER (x->hbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4126 x->handlebox_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4127 "position", &pos, NULL);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4128 if (pos == 0) nl = req.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4129 else nr = req.width;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4130 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4131 else
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4132 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4133 int pos;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4134 gtk_container_child_get (GTK_CONTAINER (x->vbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4135 x->handlebox_widget,
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4136 "position", &pos, NULL);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4137 if (pos == 0 || (pos == 1 && x->menubar_widget)) nt = req.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4138 else nb = req.height;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4139 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4140
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4141 if (nl != FRAME_TOOLBAR_LEFT_WIDTH (f)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4142 || nr != FRAME_TOOLBAR_RIGHT_WIDTH (f)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4143 || nt != FRAME_TOOLBAR_TOP_HEIGHT (f)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4144 || nb != FRAME_TOOLBAR_BOTTOM_HEIGHT (f))
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4145 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4146 FRAME_TOOLBAR_RIGHT_WIDTH (f) = FRAME_TOOLBAR_LEFT_WIDTH (f)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4147 = FRAME_TOOLBAR_TOP_HEIGHT (f) = FRAME_TOOLBAR_BOTTOM_HEIGHT (f) = 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4148 FRAME_TOOLBAR_LEFT_WIDTH (f) = nl;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4149 FRAME_TOOLBAR_RIGHT_WIDTH (f) = nr;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4150 FRAME_TOOLBAR_TOP_HEIGHT (f) = nt;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4151 FRAME_TOOLBAR_BOTTOM_HEIGHT (f) = nb;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4152 return 1;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4153 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4154
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4155 return 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4156 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4157
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4158
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
4159 /* 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
4160
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4161 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
4162 update_frame_tool_bar (FRAME_PTR f)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4163 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4164 int i;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4165 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
4166 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
4167 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
4168 GtkToolItem *ti;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4169 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
4170 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
4171
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4172 if (! FRAME_GTK_WIDGET (f))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4173 return;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4174
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4175 BLOCK_INPUT;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4176
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4177 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
4178 && 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
4179 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4180 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
4181 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
4182 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4183 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
4184 {
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4185 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
4186 && 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
4187 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
4188
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4189 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
4190 && 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
4191 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
4192 }
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4193
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4194 /* 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
4195 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
4196 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
4197 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
4198 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
4199 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
4200
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4201 if (! x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4202 xg_create_tool_bar (f);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4203
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4204 wtoolbar = GTK_TOOLBAR (x->toolbar_widget);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4205 dir = gtk_widget_get_direction (GTK_WIDGET (wtoolbar));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4206
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4207 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
4208 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4209 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
4210 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
4211 int idx;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4212 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
4213 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
4214 struct image *img = NULL;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4215 Lisp_Object image;
100100
f5d2a2e44839 (update_frame_tool_bar): Initialize variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 98555
diff changeset
4216 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
4217 GtkStockItem stock_item;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4218 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
4219 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
4220 Lisp_Object rtl;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4221 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
4222 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
4223 Lisp_Object specified_file;
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4224 char *label = SSDATA (PROP (TOOL_BAR_ITEM_LABEL));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4225
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4226 ti = gtk_toolbar_get_nth_item (GTK_TOOLBAR (wtoolbar), 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
4227
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4228 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
4229 {
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4230 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
4231 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
4232 }
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4233
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4234
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4235 image = PROP (TOOL_BAR_ITEM_IMAGES);
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4236
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4237 /* Ignore invalid image specifications. */
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4238 if (!valid_image_p (image))
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4239 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4240 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
4241 continue;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4242 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4243
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
4244 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
4245 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
4246 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
4247
9653887b5cd0 * xterm.c (Qx_gtk_map_stock): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 103690
diff changeset
4248 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
4249 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4250 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
4251 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
4252 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4253 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
4254 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
4255
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4256 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
4257 stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4258 stock = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4259
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4260 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
4261 icon_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4262 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4263 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
4264 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4265 else if (gtk_stock_lookup (SSDATA (stock), &stock_item))
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4266 icon_size = gtk_toolbar_get_icon_size (wtoolbar);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
4267 else
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4268 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4269 stock = Qnil;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4270 stock_name = NULL;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4271 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4272 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4273
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4274 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
4275 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4276 /* 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
4277
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4278 /* 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
4279 button state. */
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4280 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
4281 && !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
4282 && 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
4283 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4284 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
4285 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4286
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4287 if (VECTORP (image))
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4288 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4289 if (enabled_p)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4290 idx = (selected_p
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4291 ? 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
4292 : 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
4293 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4294 idx = (selected_p
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4295 ? 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
4296 : 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
4297
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4298 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
4299 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
4300 }
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4301 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4302 idx = -1;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4303
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4304 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
4305 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
4306 prepare_image_for_display (f, img);
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
4307
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4308 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
4309 {
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4310 if (ti)
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4311 gtk_widget_hide_all (GTK_WIDGET (ti));
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4312 else
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4313 {
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4314 /* Insert an empty (non-image) button */
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4315 ti = xg_make_tool_item (f, NULL, NULL, "", i);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4316 gtk_toolbar_insert (GTK_TOOLBAR (wtoolbar), ti, -1);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4317 }
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4318 continue;
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4319 }
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
4320 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4321
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4322 if (ti == NULL)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4323 {
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4324 GtkWidget *w;
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4325 if (stock_name)
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4326 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4327 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
4328 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
4329 (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
4330 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4331 }
102283
43221c2f4272 Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
4332 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
4333 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4334 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
4335 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
4336 (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
4337 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4338 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4339 else
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4340 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4341 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
4342 /* 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
4343 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
4344 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
4345 (gpointer)img->pixmap);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4346 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4347
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4348 gtk_misc_set_padding (GTK_MISC (w), hmargin, vmargin);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4349 ti = xg_make_tool_item (f, w, &wbutton, label, i);
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4350 gtk_toolbar_insert (GTK_TOOLBAR (wtoolbar), ti, -1);
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4351 gtk_widget_set_sensitive (wbutton, enabled_p);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4352 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4353 else
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4354 {
109067
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4355 GtkWidget *vb = gtk_bin_get_child (GTK_BIN (wbutton));
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4356 GtkWidget *wimage;
b5f73bf59a4f Use non-deprecated Gtk+ functions, add changes for Gtk+3 with GSEAL_ENABLE.
Jan D <jan.h.d@swipnet.se>
parents: 109040
diff changeset
4357 GtkWidget *wlbl = xg_get_tool_bar_widgets (vb, &wimage);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4358
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
4359 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
4360 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
4361 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
4362 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
4363 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
4364 XG_TOOL_BAR_ICON_NAME);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4365 gtk_label_set_text (GTK_LABEL (wlbl), label);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4366 if (stock_name &&
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4367 (! 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
4368 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4369 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
4370 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
4371 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
4372 (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
4373 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4374 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
4375 NULL);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4376 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME,
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4377 NULL);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4378 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4379 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
4380 (! 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
4381 {
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4382 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
4383 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
4384 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
4385 (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
4386 (GDestroyNotify) xfree);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4387 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
4388 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4389 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
4390 NULL);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4391 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4392 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
4393 {
109141
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
4394 (void) xg_get_image_for_pixmap (f, img, x->widget,
fa173b9bd9ce Fix some bad prototypes and formatting after conversion from K&R declaration.
Jan D <jan.h.d@swipnet.se>
parents: 109139
diff changeset
4395 GTK_IMAGE (wimage));
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4396 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
4397 (gpointer)img->pixmap);
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4398
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4399 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
4400 NULL);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4401 g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME,
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4402 NULL);
78721
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4403 }
a888c5a82ba5 (file_for_image, find_rtl_image): New functions.
Jan Djärv <jan.h.d@swipnet.se>
parents: 78690
diff changeset
4404
59084
6a0b8f23858b * gtkutil.c (update_frame_tool_bar): Make the value of
Jan Djärv <jan.h.d@swipnet.se>
parents: 58818
diff changeset
4405 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
4406
74990
de706755c4d7 (xg_tool_bar_button_cb): Save last modifier on widget.
Jan Djärv <jan.h.d@swipnet.se>
parents: 74376
diff changeset
4407 gtk_widget_set_sensitive (wbutton, enabled_p);
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4408 }
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4409 xg_show_toolbar_item (ti);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49572
diff changeset
4410
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4411 #undef PROP
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4412 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4413
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4414 /* 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
4415 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
4416 do
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4417 {
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4418 ti = gtk_toolbar_get_nth_item (GTK_TOOLBAR (wtoolbar), 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
4419 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
4420 } while (ti != NULL);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4421
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4422 if (f->n_tool_bar_items != 0)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4423 {
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4424 if (pack_tool_bar)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4425 xg_pack_tool_bar (f, f->tool_bar_position);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4426 gtk_widget_show (x->toolbar_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4427 gtk_widget_show (x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4428 if (xg_update_tool_bar_sizes (f))
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4429 xg_height_or_width_changed (f);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4430 }
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4431
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4432 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4433 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4434
57715
cdc48cdd5b0e * gtkutil.c: Put empty line between comment and function body.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57597
diff changeset
4435 /* 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
4436 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
4437
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4438 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
4439 free_frame_tool_bar (FRAME_PTR f)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4440 {
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4441 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
4442
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4443 if (x->toolbar_widget)
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4444 {
93030
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4445 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
4446 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
4447 /* 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
4448 not the x->handlebox_widget which is created in xg_pack_tool_bar. */
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4449 if (is_packed)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4450 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4451 if (x->toolbar_in_hbox)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4452 gtk_container_remove (GTK_CONTAINER (x->hbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4453 x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4454 else
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4455 gtk_container_remove (GTK_CONTAINER (x->vbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4456 x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4457 }
93030
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4458 else
d38f7962c052 (free_frame_tool_bar): Only call gtk_container_remove if
Jan Djärv <jan.h.d@swipnet.se>
parents: 92366
diff changeset
4459 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
4460
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4461 x->toolbar_widget = 0;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4462 x->handlebox_widget = 0;
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4463 FRAME_TOOLBAR_TOP_HEIGHT (f) = FRAME_TOOLBAR_BOTTOM_HEIGHT (f) = 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4464 FRAME_TOOLBAR_LEFT_WIDTH (f) = FRAME_TOOLBAR_RIGHT_WIDTH (f) = 0;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4465
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4466 xg_height_or_width_changed (f);
103665
340c701162a6 * emacs.c (USAGE3, standard_args): Add -mm and --maximized.
Jan Djärv <jan.h.d@swipnet.se>
parents: 103198
diff changeset
4467
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4468 UNBLOCK_INPUT;
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4469 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4470 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4471
109581
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4472 int
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4473 xg_change_toolbar_position (FRAME_PTR f, Lisp_Object pos)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4474 {
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4475 struct x_output *x = f->output_data.x;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4476
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4477 if (! x->toolbar_widget || ! x->handlebox_widget)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4478 return 1;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4479
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4480 BLOCK_INPUT;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4481 g_object_ref (x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4482 if (x->toolbar_in_hbox)
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4483 gtk_container_remove (GTK_CONTAINER (x->hbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4484 x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4485 else
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4486 gtk_container_remove (GTK_CONTAINER (x->vbox_widget),
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4487 x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4488 xg_pack_tool_bar (f, pos);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4489 g_object_unref (x->handlebox_widget);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4490 if (xg_update_tool_bar_sizes (f))
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4491 xg_height_or_width_changed (f);
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4492
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4493 UNBLOCK_INPUT;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4494 return 1;
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4495 }
06384b3caebf Add ability to put Gtk+ tool bar on the left/right/bottom or top. Default top.
Jan D. <jan.h.d@swipnet.se>
parents: 109566
diff changeset
4496
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4497
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4498
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4499 /***********************************************************************
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4500 Initializing
108024
4d8277a44bb4 Gtk tool bars can be text, icons with text or just icons.
Jan D. <jan.h.d@swipnet.se>
parents: 107997
diff changeset
4501 ***********************************************************************/
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4502 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
4503 xg_initialize (void)
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4504 {
59102
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4505 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
4506
75417
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4507 #if HAVE_XFT
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4508 /* 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
4509 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
4510 XftInit (0);
c21d47d727f3 (xg_initialize): Call XftInit if HAVE_XFT.
Jan Djärv <jan.h.d@swipnet.se>
parents: 75348
diff changeset
4511 #endif
84621
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
4512
5d074ea0e4a2 (gdpy_def): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 84604
diff changeset
4513 gdpy_def = NULL;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4514 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
4515 xg_detached_menus = 0;
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4516 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
4517 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
4518
49419
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4519 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
4520 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
4521
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4522 /* 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
4523 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
4524 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
4525 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
4526 "gtk-menu-bar-accel",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4527 "VoidSymbol",
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4528 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
4529
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4530 /* 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
4531 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
4532 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
4533 "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
4534 "Emacs",
6562bb5f04aa gtkutil.c (xg_initialize): Initialize id_to_widget here instead
Jan Djärv <jan.h.d@swipnet.se>
parents: 49359
diff changeset
4535 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
4536
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4537 /* 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
4538 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
4539 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
4540 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
4541 "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
4542
0096c58ce34a * xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59084
diff changeset
4543 /* 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
4544 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
4545 (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
4546 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
4547 "cancel", 0);
49323
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4548 }
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4549
078b78ea8e76 GTK files gtkutil.c and .h
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
4550 #endif /* USE_GTK */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4551
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4552 /* arch-tag: fe7104da-bc1e-4aba-9bd1-f349c528f7e3
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52080
diff changeset
4553 (do not change this comment) */