Mercurial > hg > forks > geeqie
annotate src/toolbar.c @ 2801:3e9ca298bb1d
Fix #251: Crop simulation
Menu option to draw a rectangle.
Rectangle co-ordinates can be obtained with the remote command:
--remote --get-rectangle
author | Colin Clark <colin.clark@cclark.uk> |
---|---|
date | Fri, 20 Jul 2018 17:45:10 +0100 |
parents | 684ca84becd2 |
children | 865f7eab9b6d |
rev | line source |
---|---|
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
1 /* |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
2 * Copyright (C) 2004 John Ellis |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
3 * Copyright (C) 2008 - 2017 The Geeqie Team |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
4 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
5 * Author: Colin Clark |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
6 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
7 * This program is free software; you can redistribute it and/or modify |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
9 * the Free Software Foundation; either version 2 of the License, or |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
10 * (at your option) any later version. |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
11 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
15 * GNU General Public License for more details. |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
16 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License along |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
18 * with this program; if not, write to the Free Software Foundation, Inc., |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
20 */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
21 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
22 #include "main.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
23 #include "toolbar.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
24 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
25 #include "collect.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
26 #include "layout_util.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
27 #include "ui_fileops.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
28 #include "ui_misc.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
29 #include "pixbuf_util.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
30 #include "ui_menu.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
31 #include "editors.h" |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
32 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
33 /** Implements the user-definable toolbar function |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
34 * Called from the Preferences/toolbar tab |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
35 **/ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
36 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
37 typedef struct _ToolbarData ToolbarData; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
38 struct _ToolbarData |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
39 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
40 GtkWidget *widget; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
41 GtkWidget *vbox; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
42 GtkWidget *add_button; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
43 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
44 LayoutWindow *lw; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
45 }; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
46 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
47 typedef struct _ToolbarButtonData ToolbarButtonData; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
48 struct _ToolbarButtonData |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
49 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
50 GtkWidget *button; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
51 GtkWidget *button_label; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
52 GtkWidget *image; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
53 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
54 gchar *name; /* GtkActionEntry terminology */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
55 gchar *stock_id; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
56 }; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
57 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
58 static ToolbarData *toolbarlist; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
59 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
60 typedef struct _UseableToolbarItems UseableToolbarItems; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
61 struct _UseableToolbarItems |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
62 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
63 gchar *name; /* GtkActionEntry terminology */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
64 gchar *label; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
65 gchar *stock_id; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
66 }; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
67 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
68 /* FIXME Should be created by program from menu_entries[] |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
69 * in layout_util.c */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
70 /** The user is limited to selecting from this list of menu items |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
71 * plus any desktop files |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
72 **/ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
73 static const UseableToolbarItems useable_toolbar_items[] = { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
74 {"FirstImage", N_("First Image"), GTK_STOCK_GOTO_TOP}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
75 {"PrevImage", N_("Previous Image"), GTK_STOCK_GO_UP}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
76 {"NextImage", N_("Next Image"), GTK_STOCK_GO_DOWN}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
77 {"LastImage", N_("Last Image"), GTK_STOCK_GOTO_BOTTOM}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
78 {"Back", N_("Back"), GTK_STOCK_GO_BACK}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
79 {"Forward", N_("Forward"), GTK_STOCK_GO_FORWARD}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
80 {"Home", N_("Home"), GTK_STOCK_HOME}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
81 {"Up", N_("Up"), GTK_STOCK_GO_UP}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
82 {"NewWindow", N_("New _window"), GTK_STOCK_NEW}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
83 {"NewCollection", N_("New collection"), GTK_STOCK_INDEX}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
84 {"OpenCollection", N_("Open collection"), GTK_STOCK_OPEN}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
85 {"Search", N_("Search"), GTK_STOCK_FIND}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
86 {"FindDupes", N_("Find duplicates"), GTK_STOCK_FIND}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
87 {"PanView", N_("Pan view"), PIXBUF_INLINE_ICON_PANORAMA}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
88 {"Print", N_("Print"), GTK_STOCK_PRINT}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
89 {"Preferences", N_("Preferences"), GTK_STOCK_PREFERENCES}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
90 {"LayoutConfig", N_("Configure this window"), GTK_STOCK_PREFERENCES}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
91 {"Maintenance", N_("Cache maintenance"), PIXBUF_INLINE_ICON_MAINTENANCE}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
92 {"ZoomIn", N_("Zoom in"), GTK_STOCK_ZOOM_IN}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
93 {"ZoomOut", N_("Zoom out"), GTK_STOCK_ZOOM_OUT}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
94 {"Zoom100", N_("Zoom 1:1"), GTK_STOCK_ZOOM_100}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
95 {"ZoomFit", N_("Zoom to fit"), GTK_STOCK_ZOOM_FIT}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
96 {"ZoomFillHor", N_("Fit Horizontaly"), PIXBUF_INLINE_ICON_ZOOMFILLHOR}, |
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
97 {"ZoomFillVert", N_("Fit vertically"), PIXBUF_INLINE_ICON_ZOOMFILLVERT}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
98 {"Zoom200", N_("Zoom 2:1"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
99 {"Zoom300", N_("Zoom 3:1"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
100 {"Zoom400", N_("Zoom 4:1"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
101 {"Zoom50", N_("Zoom 1:2"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
102 {"Zoom33", N_("Zoom1:3"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
103 {"Zoom25", N_("Zoom 1:4"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
104 {"ConnectZoomIn", N_("Connected Zoom in"), GTK_STOCK_ZOOM_IN}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
105 {"HideTools", N_("Hide file list"), PIXBUF_INLINE_ICON_HIDETOOLS}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
106 {"SlideShowPause", N_("Pause slideshow"), GTK_STOCK_MEDIA_PAUSE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
107 {"SlideShowFaster", N_("Slideshow Faster"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
108 {"SlideShowSlower", N_("Slideshow Slower"), GTK_STOCK_FILE}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
109 {"Refresh", N_("Refresh"), GTK_STOCK_REFRESH}, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
110 {"HelpContents", N_("Help"), GTK_STOCK_HELP}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
111 {"ExifWin", N_("Exif window"), PIXBUF_INLINE_ICON_EXIF}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
112 {"Thumbnails", N_("Show thumbnails"), PIXBUF_INLINE_ICON_THUMB}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
113 {"ShowMarks", N_("Show marks"), PIXBUF_INLINE_ICON_MARKS}, |
2794
780a9b685335
Ref #331: Overimposed custom composition rule lines
Colin Clark <colin.clark@cclark.uk>
parents:
2753
diff
changeset
|
114 {"ImageGuidelines", N_("Show guidelines"), PIXBUF_INLINE_ICON_GUIDELINES}, |
2801
3e9ca298bb1d
Fix #251: Crop simulation
Colin Clark <colin.clark@cclark.uk>
parents:
2795
diff
changeset
|
115 {"DrawRectangle", N_("Draw Rectangle"), PIXBUF_INLINE_ICON_DRAW_RECTANGLE}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
116 {"FloatTools", N_("Float file list"), PIXBUF_INLINE_ICON_FLOAT}, |
2795
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
117 {"SBar", N_("Info sidebar"), PIXBUF_INLINE_ICON_INFO}, |
684ca84becd2
Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents:
2794
diff
changeset
|
118 {"SBarSort", N_("Sort manager"), PIXBUF_INLINE_ICON_SORT}, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
119 {"Quit", N_("Quit"), GTK_STOCK_QUIT}, |
2632
22a9496e46c0
Fixing missing field initializer
Klaus Ethgen <Klaus@Ethgen.de>
parents:
2625
diff
changeset
|
120 {NULL, NULL, NULL} |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
121 }; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
122 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
123 /** |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
124 * @brief |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
125 * @param widget Not used |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
126 * @param data Pointer to vbox list item |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
127 * @param up Up/Down movement |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
128 * @param single_step Move up/down one step, or to top/bottom |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
129 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
130 */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
131 static void toolbar_item_move(GtkWidget *widget, gpointer data, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
132 gboolean up, gboolean single_step) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
133 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
134 GtkWidget *list_item = data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
135 GtkWidget *box; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
136 gint pos = 0; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
137 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
138 if (!list_item) return; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
139 box = gtk_widget_get_ancestor(list_item, GTK_TYPE_BOX); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
140 if (!box) return; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
141 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
142 gtk_container_child_get(GTK_CONTAINER(box), list_item, "position", &pos, NULL); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
143 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
144 if (single_step) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
145 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
146 pos = up ? (pos - 1) : (pos + 1); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
147 if (pos < 0) pos = 0; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
148 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
149 else |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
150 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
151 pos = up ? 0 : -1; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
152 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
153 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
154 gtk_box_reorder_child(GTK_BOX(box), list_item, pos); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
155 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
156 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
157 static void toolbar_item_move_up_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
158 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
159 toolbar_item_move(widget, data, TRUE, TRUE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
160 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
161 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
162 static void toolbar_item_move_down_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
163 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
164 toolbar_item_move(widget, data, FALSE, TRUE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
165 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
166 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
167 static void toolbar_item_move_top_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
168 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
169 toolbar_item_move(widget, data, TRUE, FALSE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
170 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
171 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
172 static void toolbar_item_move_bottom_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
173 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
174 toolbar_item_move(widget, data, FALSE, FALSE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
175 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
176 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
177 static void toolbar_item_delete_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
178 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
179 gtk_widget_destroy(data); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
180 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
181 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
182 static void toolbar_menu_popup(GtkWidget *widget) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
183 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
184 GtkWidget *menu; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
185 GtkWidget *vbox; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
186 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
187 vbox = gtk_widget_get_parent(widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
188 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
189 menu = popup_menu_short_lived(); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
190 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
191 if (widget) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
192 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
193 menu_item_add_stock(menu, _("Move to _top"), GTK_STOCK_GOTO_TOP, G_CALLBACK(toolbar_item_move_top_cb), widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
194 menu_item_add_stock(menu, _("Move _up"), GTK_STOCK_GO_UP, G_CALLBACK(toolbar_item_move_up_cb), widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
195 menu_item_add_stock(menu, _("Move _down"), GTK_STOCK_GO_DOWN, G_CALLBACK(toolbar_item_move_down_cb), widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
196 menu_item_add_stock(menu, _("Move to _bottom"), GTK_STOCK_GOTO_BOTTOM, G_CALLBACK(toolbar_item_move_bottom_cb), widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
197 menu_item_add_divider(menu); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
198 menu_item_add_stock(menu, _("Remove"), GTK_STOCK_DELETE, G_CALLBACK(toolbar_item_delete_cb), widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
199 menu_item_add_divider(menu); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
200 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
201 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
202 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, vbox, 0, GDK_CURRENT_TIME); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
203 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
204 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
205 static gboolean toolbar_press_cb(GtkWidget *button, GdkEventButton *event, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
206 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
207 ToolbarButtonData *button_data = data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
208 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
209 if (event->button == MOUSE_BUTTON_RIGHT) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
210 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
211 toolbar_menu_popup(button_data->button); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
212 return TRUE; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
213 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
214 return FALSE; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
215 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
216 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
217 static void get_toolbar_item(const gchar *name, gchar **label, gchar **stock_id) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
218 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
219 const UseableToolbarItems *list = useable_toolbar_items; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
220 *label = NULL; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
221 *stock_id = NULL; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
222 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
223 while (list->name) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
224 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
225 if (g_strcmp0(list->name, name) == 0) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
226 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
227 *label = g_strdup(list->label); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
228 *stock_id = g_strdup(list->stock_id); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
229 break; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
230 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
231 list++; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
232 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
233 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
234 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
235 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
236 static void toolbar_item_free(ToolbarButtonData *tbbd) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
237 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
238 if (!tbbd) return; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
239 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
240 g_free(tbbd->name); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
241 g_free(tbbd->stock_id); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
242 g_free(tbbd); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
243 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
244 |
2652
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
245 static void toolbar_button_free(GtkWidget *widget) |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
246 { |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
247 g_free(g_object_get_data(G_OBJECT(widget), "toolbar_add_name")); |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
248 g_free(g_object_get_data(G_OBJECT(widget), "toolbar_add_label")); |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
249 g_free(g_object_get_data(G_OBJECT(widget), "toolbar_add_stock_id")); |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
250 } |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
251 |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
252 static void toolbarlist_add_button(const gchar *name, const gchar *label, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
253 const gchar *stock_id, GtkBox *box) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
254 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
255 ToolbarButtonData *toolbar_entry; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
256 GtkWidget *hbox; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
257 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
258 toolbar_entry = g_new(ToolbarButtonData,1); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
259 toolbar_entry->button = gtk_button_new(); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
260 gtk_button_set_relief(GTK_BUTTON(toolbar_entry->button), GTK_RELIEF_NONE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
261 gtk_box_pack_start(GTK_BOX(box), toolbar_entry->button, FALSE, FALSE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
262 gtk_widget_show(toolbar_entry->button); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
263 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
264 g_object_set_data_full(G_OBJECT(toolbar_entry->button), "toolbarbuttondata", |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
265 toolbar_entry, (GDestroyNotify)toolbar_item_free); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
266 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
267 hbox = gtk_hbox_new(FALSE, PREF_PAD_BUTTON_GAP); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
268 gtk_container_add(GTK_CONTAINER(toolbar_entry->button), hbox); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
269 gtk_widget_show(hbox); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
270 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
271 toolbar_entry->button_label = gtk_label_new(label); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
272 toolbar_entry->name = g_strdup(name); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
273 toolbar_entry->stock_id = g_strdup(stock_id); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
274 g_signal_connect(G_OBJECT(toolbar_entry->button), "button_release_event", |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
275 G_CALLBACK(toolbar_press_cb), toolbar_entry); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
276 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
277 if (toolbar_entry->stock_id) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
278 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
279 GdkPixbuf *pixbuf; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
280 gchar *iconl; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
281 iconl = path_from_utf8(toolbar_entry->stock_id); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
282 pixbuf = gdk_pixbuf_new_from_file(iconl, NULL); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
283 g_free(iconl); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
284 if (pixbuf) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
285 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
286 GdkPixbuf *scaled; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
287 gint w, h; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
288 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
289 w = h = 16; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
290 gtk_icon_size_lookup(GTK_ICON_SIZE_BUTTON, &w, &h); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
291 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
292 scaled = gdk_pixbuf_scale_simple(pixbuf, w, h, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
293 GDK_INTERP_BILINEAR); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
294 toolbar_entry->image = gtk_image_new_from_pixbuf(scaled); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
295 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
296 g_object_unref(scaled); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
297 g_object_unref(pixbuf); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
298 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
299 else |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
300 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
301 toolbar_entry->image = gtk_image_new_from_stock(toolbar_entry->stock_id, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
302 GTK_ICON_SIZE_BUTTON); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
303 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
304 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
305 else |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
306 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
307 toolbar_entry->image = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
308 GTK_ICON_SIZE_BUTTON); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
309 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
310 gtk_box_pack_start(GTK_BOX(hbox), toolbar_entry->image, FALSE, FALSE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
311 gtk_widget_show(toolbar_entry->image); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
312 gtk_box_pack_start(GTK_BOX(hbox), toolbar_entry->button_label, FALSE, FALSE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
313 gtk_widget_show(toolbar_entry->button_label); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
314 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
315 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
316 static void toolbarlist_add_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
317 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
318 const gchar *name = g_object_get_data(G_OBJECT(widget), "toolbar_add_name"); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
319 const gchar *label = g_object_get_data(G_OBJECT(widget), "toolbar_add_label"); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
320 const gchar *stock_id = g_object_get_data(G_OBJECT(widget), "toolbar_add_stock_id"); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
321 ToolbarData *tbbd = data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
322 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
323 toolbarlist_add_button(name, label, stock_id, GTK_BOX(tbbd->vbox)); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
324 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
325 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
326 static void get_desktop_data(const gchar *name, gchar **label, gchar **stock_id) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
327 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
328 GList *editors_list; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
329 GList *work; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
330 *label = NULL; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
331 *stock_id = NULL; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
332 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
333 editors_list = editor_list_get(); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
334 work = editors_list; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
335 while (work) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
336 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
337 const EditorDescription *editor = work->data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
338 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
339 if (g_strcmp0(name, editor->key) == 0) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
340 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
341 *label = g_strdup(editor->name); |
2652
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
342 *stock_id = g_strconcat(editor->icon, ".desktop", NULL); |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
343 break; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
344 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
345 work = work->next; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
346 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
347 g_list_free(editors_list); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
348 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
349 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
350 static void toolbar_menu_add_popup(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
351 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
352 GtkWidget *menu; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
353 GList *editors_list; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
354 GList *work; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
355 ToolbarData *toolbarlist = data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
356 const UseableToolbarItems *list = useable_toolbar_items; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
357 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
358 menu = popup_menu_short_lived(); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
359 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
360 /* get standard menu item data */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
361 while (list->name) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
362 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
363 GtkWidget *item; |
2625
3b73a30e2e9f
Addl #444: Change format for Add button menu
Colin Clark <colin.clark@cclark.uk>
parents:
2623
diff
changeset
|
364 item = menu_item_add_stock(menu, list->label, list->stock_id, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
365 G_CALLBACK(toolbarlist_add_cb), toolbarlist); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
366 g_object_set_data(G_OBJECT(item), "toolbar_add_name", g_strdup(list->name)); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
367 g_object_set_data(G_OBJECT(item), "toolbar_add_label", g_strdup(list->label)); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
368 g_object_set_data(G_OBJECT(item), "toolbar_add_stock_id", g_strdup(list->stock_id)); |
2652
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
369 g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(toolbar_button_free), item); |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
370 list++; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
371 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
372 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
373 /* get desktop file data */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
374 editors_list = editor_list_get(); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
375 work = editors_list; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
376 while (work) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
377 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
378 const EditorDescription *editor = work->data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
379 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
380 GtkWidget *item; |
2652
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
381 gchar *icon = g_strconcat(editor->icon, ".desktop", NULL); |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
382 |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
383 item = menu_item_add_stock(menu, editor->name, icon, |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
384 G_CALLBACK(toolbarlist_add_cb), toolbarlist); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
385 g_object_set_data(G_OBJECT(item), "toolbar_add_name", g_strdup(editor->key)); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
386 g_object_set_data(G_OBJECT(item), "toolbar_add_label", g_strdup(editor->name)); |
2652
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
387 g_object_set_data(G_OBJECT(item), "toolbar_add_stock_id", icon); |
4635d9347338
Addl fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
2632
diff
changeset
|
388 g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(toolbar_button_free), item); |
2623
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
389 work = work->next; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
390 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
391 g_list_free(editors_list); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
392 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
393 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, widget, 0, GDK_CURRENT_TIME); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
394 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
395 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
396 static gboolean toolbar_menu_add_cb(GtkWidget *widget, gpointer data) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
397 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
398 ToolbarData *toolbarlist = data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
399 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
400 toolbar_menu_add_popup(widget, toolbarlist); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
401 return TRUE; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
402 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
403 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
404 /** |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
405 * @brief For each layoutwindow, clear toolbar and reload with current selection |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
406 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
407 */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
408 void toolbar_apply() |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
409 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
410 LayoutWindow *lw; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
411 GList *work_windows; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
412 GList *work_toolbar; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
413 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
414 work_windows = layout_window_list; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
415 while (work_windows) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
416 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
417 lw = work_windows->data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
418 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
419 layout_toolbar_clear(lw, TOOLBAR_MAIN); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
420 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
421 work_toolbar = gtk_container_get_children(GTK_CONTAINER(toolbarlist->vbox)); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
422 while (work_toolbar) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
423 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
424 GtkButton *button = work_toolbar->data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
425 ToolbarButtonData *tbbd; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
426 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
427 tbbd = g_object_get_data(G_OBJECT(button),"toolbarbuttondata"); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
428 layout_toolbar_add(lw, TOOLBAR_MAIN, tbbd->name); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
429 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
430 work_toolbar = work_toolbar->next; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
431 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
432 g_list_free(work_toolbar); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
433 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
434 work_windows = work_windows->next; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
435 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
436 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
437 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
438 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
439 /** |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
440 * @brief Load the current toolbar items into the vbox |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
441 * @param lw |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
442 * @param box The vbox displayed in the preferences Toolbar tab |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
443 * |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
444 * Get the current contents of the toolbar, both menu items |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
445 * and desktop items, and load them into the vbox |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
446 */ |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
447 static void toolbarlist_populate(LayoutWindow *lw, GtkBox *box) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
448 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
449 GList *work = g_list_first(lw->toolbar_actions[TOOLBAR_MAIN]); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
450 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
451 while (work) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
452 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
453 gchar *name = work->data; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
454 gchar *label; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
455 gchar *icon; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
456 work = work->next; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
457 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
458 if (file_extension_match(name, ".desktop")) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
459 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
460 get_desktop_data(name, &label, &icon); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
461 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
462 else |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
463 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
464 get_toolbar_item(name, &label, &icon); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
465 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
466 toolbarlist_add_button(name, label, icon, box); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
467 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
468 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
469 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
470 GtkWidget *toolbar_select_new(LayoutWindow *lw) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
471 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
472 GtkWidget *scrolled; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
473 GtkWidget *tbar; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
474 GtkWidget *add_box; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
475 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
476 if (!lw) return NULL; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
477 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
478 if (!toolbarlist) |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
479 { |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
480 toolbarlist = g_new0(ToolbarData, 1); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
481 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
482 toolbarlist->lw = lw; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
483 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
484 toolbarlist->widget = gtk_vbox_new(FALSE, PREF_PAD_GAP); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
485 gtk_widget_show(toolbarlist->widget); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
486 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
487 scrolled = gtk_scrolled_window_new(NULL, NULL); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
488 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
489 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
490 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_NONE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
491 gtk_box_pack_start(GTK_BOX(toolbarlist->widget), scrolled, TRUE, TRUE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
492 gtk_widget_show(scrolled); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
493 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
494 toolbarlist->vbox = gtk_vbox_new(FALSE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
495 gtk_widget_show(toolbarlist->vbox); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
496 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled), toolbarlist->vbox); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
497 gtk_viewport_set_shadow_type(GTK_VIEWPORT(gtk_bin_get_child(GTK_BIN(scrolled))), |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
498 GTK_SHADOW_NONE); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
499 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
500 add_box = gtk_vbox_new(FALSE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
501 gtk_widget_show(add_box); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
502 gtk_box_pack_end(GTK_BOX(toolbarlist->widget), add_box, FALSE, FALSE, 0); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
503 tbar = pref_toolbar_new(add_box, GTK_TOOLBAR_ICONS); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
504 toolbarlist->add_button = pref_toolbar_button(tbar, GTK_STOCK_ADD, "NULL", FALSE, |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
505 _("Add Toolbar Item"), |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
506 G_CALLBACK(toolbar_menu_add_cb), toolbarlist); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
507 gtk_widget_show(toolbarlist->add_button); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
508 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
509 toolbarlist_populate(lw,GTK_BOX(toolbarlist->vbox)); |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
510 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
511 return toolbarlist->widget; |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
512 } |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
513 |
f5886b8e1968
Fix #444: User-definable toolbar
Colin Clark <colin.clark@cclark.uk>
parents:
diff
changeset
|
514 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |