41
41
#include "panel-util.h"
45
#include "panel-config-global.h"
46
#include "panel-profile.h"
47
44
#include "panel-properties-dialog.h"
45
#include "panel-layout.h"
48
46
#include "panel-lockdown.h"
49
47
#include "panel-addto.h"
50
48
#include "panel-icon-names.h"
53
panel_context_menu_show_help (GtkWidget *w,
56
panel_show_help (gtk_widget_get_screen (w),
57
"user-guide", "gospanel-1", NULL);
51
panel_context_menu_create_new_panel (GtkWidget *menuitem)
53
panel_layout_toplevel_create (gtk_widget_get_screen (menuitem));
57
panel_context_menu_delete_panel (PanelToplevel *toplevel)
59
if (panel_toplevel_is_last (toplevel)) {
60
panel_error_dialog (GTK_WINDOW (toplevel),
61
gtk_window_get_screen (GTK_WINDOW (toplevel)),
62
"cannot_delete_last_panel", TRUE,
63
_("Cannot delete this panel"),
64
_("You must always have at least one panel."));
68
panel_delete (toplevel);
80
panel_context_menu_show_about_dialog (GtkWidget *menuitem)
82
static GtkWidget *about = NULL;
84
"Alex Larsson <alexl@redhat.com>",
85
"Anders Carlsson <andersca@gnu.org>",
86
"Arvind Samptur <arvind.samptur@wipro.com>",
87
"Darin Adler <darin@bentspoon.com>",
88
"Elliot Lee <sopwith@redhat.com>",
89
"Federico Mena <quartic@gimp.org>",
90
"George Lebl <jirka@5z.com>",
91
"Glynn Foster <glynn.foster@sun.com>",
92
"Ian Main <imain@gtk.org>",
93
"Ian McKellar <yakk@yakk.net>",
94
"Jacob Berkman <jberkman@andrew.cmu.edu>",
95
"Mark McLoughlin <mark@skynet.ie>",
96
"Martin Baulig <baulig@suse.de>",
97
"Miguel de Icaza <miguel@kernel.org>",
98
"Owen Taylor <otaylor@redhat.com>",
99
"Padraig O'Briain <padraig.obriain@sun.com>",
100
"Seth Nickell <snickell@stanford.edu>",
101
"Stephen Browne <stephen.browne@sun.com>",
102
"Tom Tromey <tromey@cygnus.com>",
103
"Vincent Untz <vuntz@gnome.org>",
104
N_("And many, many others..."),
107
char *documenters[] = {
108
"Alexander Kirillov <kirillov@math.sunysb.edu>",
109
"Dan Mueth <d-mueth@uchicago.edu>",
110
"Dave Mason <dcm@redhat.com>",
116
gtk_window_set_screen (GTK_WINDOW (about),
117
menuitem_to_screen (menuitem));
118
gtk_window_present (GTK_WINDOW (about));
122
for (i = 0; authors [i]; i++)
123
authors [i] = _(authors [i]);
125
/* Note: we don't use gtk_show_about_dialog() since some applets can
126
* be loaded in this process and we don't want to share the about
128
about = gtk_about_dialog_new ();
130
"program-name", _("The GNOME Panel"),
132
"copyright", "Copyright \xc2\xa9 1997-2003 Free Software Foundation, Inc.",
133
"comments", _("This program is responsible for launching other "
134
"applications and provides useful utilities."),
136
"documenters", documenters,
137
"title", _("About the GNOME Panel"),
138
"translator-credits", _("translator-credits"),
139
"logo-icon-name", PANEL_ICON_PANEL,
142
gtk_window_set_screen (GTK_WINDOW (about),
143
menuitem_to_screen (menuitem));
144
g_signal_connect (about, "destroy",
145
G_CALLBACK (gtk_widget_destroyed),
147
g_signal_connect (about, "event",
148
G_CALLBACK (panel_context_menu_check_for_screen),
151
g_signal_connect (about, "response",
152
G_CALLBACK (gtk_widget_destroy),
155
gtk_widget_show (about);
159
panel_context_menu_create_new_panel (GtkWidget *menuitem)
161
panel_profile_create_toplevel (gtk_widget_get_screen (menuitem));
165
panel_context_menu_delete_panel (PanelToplevel *toplevel)
167
if (panel_toplevel_is_last_unattached (toplevel)) {
168
panel_error_dialog (GTK_WINDOW (toplevel),
169
gtk_window_get_screen (GTK_WINDOW (toplevel)),
170
"cannot_delete_last_panel", TRUE,
171
_("Cannot delete this panel"),
172
_("You must always have at least one panel."));
176
panel_delete (toplevel);
180
95
panel_context_menu_setup_delete_panel_item (GtkWidget *menu,
181
96
GtkWidget *menuitem)
183
98
PanelWidget *panel_widget;
184
99
gboolean sensitive;
101
panel_context_menu_check_for_screen (NULL, NULL, NULL);
186
103
panel_widget = menu_get_panel (menu);
188
105
g_assert (PANEL_IS_TOPLEVEL (panel_widget->toplevel));
191
!panel_toplevel_is_last_unattached (panel_widget->toplevel) &&
192
!panel_lockdown_get_locked_down () &&
193
panel_profile_id_lists_are_writable ();
108
!panel_toplevel_is_last (panel_widget->toplevel) &&
109
!panel_lockdown_get_panels_locked_down_s () &&
110
panel_layout_is_writable ();
195
112
gtk_widget_set_sensitive (menuitem, sensitive);
247
164
G_CALLBACK (panel_context_menu_create_new_panel),
249
166
gtk_widget_set_sensitive (menuitem,
250
panel_profile_id_lists_are_writable ());
252
add_menu_separator (menu);
167
panel_layout_is_writable ());
256
171
panel_context_menu_create (PanelWidget *panel)
258
173
GtkWidget *retval;
262
if (panel->master_widget) {
266
pointer = g_object_get_data (G_OBJECT (panel->master_widget),
269
g_assert (pointer != NULL);
270
info = (AppletInfo *) pointer;
272
if (info->menu == NULL) {
273
info->menu = panel_applet_create_menu (info);
175
if (panel_lockdown_get_panels_locked_down_s ())
279
178
retval = create_empty_menu ();
280
180
gtk_widget_set_name (retval, "gnome-panel-context-menu");
282
if (!panel_lockdown_get_locked_down ())
283
panel_context_menu_build_edition (panel, retval);
285
menuitem = gtk_image_menu_item_new_with_mnemonic (_("_Help"));
286
image = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
287
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
288
gtk_widget_show (menuitem);
289
gtk_menu_shell_append (GTK_MENU_SHELL (retval), menuitem);
290
g_signal_connect (menuitem, "activate",
291
G_CALLBACK (panel_context_menu_show_help), NULL);
293
menuitem = gtk_image_menu_item_new_with_mnemonic (_("A_bout Panels"));
294
image = gtk_image_new_from_stock (GTK_STOCK_ABOUT,
296
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
297
gtk_widget_show (menuitem);
298
gtk_menu_shell_append (GTK_MENU_SHELL (retval), menuitem);
299
g_signal_connect (menuitem, "activate",
300
G_CALLBACK (panel_context_menu_show_about_dialog),
182
panel_context_menu_build_edition (panel, retval);
303
184
//FIXME: can we get rid of this? (needed by menu_get_panel())
304
185
g_object_set_data (G_OBJECT (retval), "menu_panel", panel);
187
g_signal_connect (retval, "event",
188
G_CALLBACK (panel_context_menu_check_for_screen),