66
66
/******************************************************************************/
68
68
panel_menu_bar_edit_prefs (PanelMenuBar *self) {
69
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
71
g_return_if_fail (IS_PANEL_MENU_BAR (self));
73
AppletPreferences *prefs = self->priv->prefs;
74
applet_preferences_make_dialog (prefs);
69
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
71
g_return_if_fail (IS_PANEL_MENU_BAR (self));
73
AppletPreferences *prefs = self->priv->prefs;
74
applet_preferences_make_dialog (prefs);
76
76
/******************************************************************************/
77
static void /* Originally from the Main Menu Bar Applet */
78
panel_menu_bar_change_orient (PanelApplet *applet,
79
PanelAppletOrient orientation,
81
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
83
g_return_if_fail (IS_PANEL_MENU_BAR (self));
86
PangoEllipsizeMode ellipsize_mode = PANGO_ELLIPSIZE_NONE;
87
GtkPackDirection pack_direction = GTK_PACK_DIRECTION_LTR;
88
double text_angle = 0.0;
89
float text_xalign = 0.0;
90
float text_yalign = 0.5;
92
/* update the panel's orientation */
93
self->priv->orientation = orientation;
95
/* set the text and pack direction and */
96
switch (orientation) {
97
case PANEL_APPLET_ORIENT_UP:
98
case PANEL_APPLET_ORIENT_DOWN:
99
/* handled by defaults */
101
case PANEL_APPLET_ORIENT_RIGHT:
102
if (self->priv->prefs->menu_bar_prefs->horizontal_text) {
103
pack_direction = GTK_PACK_DIRECTION_TTB;
104
ellipsize_mode = PANGO_ELLIPSIZE_END;
107
pack_direction = GTK_PACK_DIRECTION_BTT;
113
case PANEL_APPLET_ORIENT_LEFT:
114
pack_direction = GTK_PACK_DIRECTION_TTB;
115
if (self->priv->prefs->menu_bar_prefs->horizontal_text) {
116
ellipsize_mode = PANGO_ELLIPSIZE_END;
125
g_assert_not_reached ();
128
/* update the menu_bar pack direction */
129
gtk_menu_bar_set_pack_direction (GTK_MENU_BAR (self), pack_direction);
130
gtk_menu_bar_set_child_pack_direction (GTK_MENU_BAR (self), pack_direction);
132
/* update the menu_item ellipsizing */
133
for (i=0; i < self->priv->file_browsers->len; i++) {
134
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, i));
135
GtkWidget *label = gtk_bin_get_child (GTK_BIN (menu_browser));
136
if (GTK_IS_LABEL (label)) {
137
gtk_label_set_ellipsize (GTK_LABEL (label), ellipsize_mode);
138
gtk_label_set_angle (GTK_LABEL (label), text_angle);
139
gtk_misc_set_alignment (GTK_MISC (label), text_xalign, text_yalign);
77
static void /* Originally from the Main Menu Bar Applet */
78
panel_menu_bar_change_orient (PanelApplet *applet,
79
PanelAppletOrient orientation,
81
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
83
g_return_if_fail (IS_PANEL_MENU_BAR (self));
86
PangoEllipsizeMode ellipsize_mode = PANGO_ELLIPSIZE_NONE;
87
GtkPackDirection pack_direction = GTK_PACK_DIRECTION_LTR;
88
double text_angle = 0.0;
89
float text_xalign = 0.0;
90
float text_yalign = 0.5;
92
/* update the panel's orientation */
93
self->priv->orientation = orientation;
95
/* set the text and pack direction and */
96
switch (orientation) {
97
case PANEL_APPLET_ORIENT_UP:
98
case PANEL_APPLET_ORIENT_DOWN:
99
/* handled by defaults */
101
case PANEL_APPLET_ORIENT_RIGHT:
102
if (self->priv->prefs->menu_bar_prefs->horizontal_text) {
103
pack_direction = GTK_PACK_DIRECTION_TTB;
104
ellipsize_mode = PANGO_ELLIPSIZE_END;
107
pack_direction = GTK_PACK_DIRECTION_BTT;
113
case PANEL_APPLET_ORIENT_LEFT:
114
pack_direction = GTK_PACK_DIRECTION_TTB;
115
if (self->priv->prefs->menu_bar_prefs->horizontal_text) {
116
ellipsize_mode = PANGO_ELLIPSIZE_END;
125
g_assert_not_reached ();
128
/* update the menu_bar pack direction */
129
gtk_menu_bar_set_pack_direction (GTK_MENU_BAR (self), pack_direction);
130
gtk_menu_bar_set_child_pack_direction (GTK_MENU_BAR (self), pack_direction);
132
/* update the menu_item ellipsizing */
133
for (i=0; i < self->priv->file_browsers->len; i++) {
134
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, i));
135
GtkWidget *label = gtk_bin_get_child (GTK_BIN (menu_browser));
136
if (GTK_IS_LABEL (label)) {
137
gtk_label_set_ellipsize (GTK_LABEL (label), ellipsize_mode);
138
gtk_label_set_angle (GTK_LABEL (label), text_angle);
139
gtk_misc_set_alignment (GTK_MISC (label), text_xalign, text_yalign);
143
143
/******************************************************************************/
145
145
panel_menu_bar_update_orient (PanelMenuBar *self) {
146
g_return_if_fail (IS_PANEL_MENU_BAR (self));
146
g_return_if_fail (IS_PANEL_MENU_BAR (self));
148
PanelAppletOrient orientation = panel_applet_get_orient (PANEL_APPLET (self->priv->applet));
149
panel_menu_bar_change_orient (self->priv->applet, orientation, self);
148
PanelAppletOrient orientation = panel_applet_get_orient (PANEL_APPLET (self->priv->applet));
149
panel_menu_bar_change_orient (self->priv->applet, orientation, self);
151
151
/******************************************************************************/
152
static void /* Taken from the Main Menu Bar Applet */
152
static void /* Taken from the Main Menu Bar Applet */
153
153
panel_menu_bar_size_allocate (GtkWidget *widget,
154
GtkAllocation *allocation) {
155
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
157
PanelMenuBar *self = (PanelMenuBar *)widget;
159
g_return_if_fail (IS_PANEL_MENU_BAR (self));
164
allocation->height += 2;
165
allocation->width += 2;
167
/* update the panel's width */
168
self->priv->panel_size = allocation->height;
169
if (self->priv->orientation == PANEL_APPLET_ORIENT_RIGHT ||
170
self->priv->orientation == PANEL_APPLET_ORIENT_LEFT) {
171
self->priv->panel_size = allocation->width;
174
GTK_WIDGET_CLASS (panel_menu_bar_parent_class)->size_allocate (widget, allocation);
176
PanelAppletOrient orientation = panel_applet_get_orient (PANEL_APPLET (self->priv->applet));
177
panel_menu_bar_change_orient (self->priv->applet, orientation, self);
154
GtkAllocation *allocation) {
155
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
157
PanelMenuBar *self = (PanelMenuBar *)widget;
159
g_return_if_fail (IS_PANEL_MENU_BAR (self));
164
allocation->height += 2;
165
allocation->width += 2;
167
/* update the panel's width */
168
self->priv->panel_size = allocation->height;
169
if (self->priv->orientation == PANEL_APPLET_ORIENT_RIGHT ||
170
self->priv->orientation == PANEL_APPLET_ORIENT_LEFT) {
171
self->priv->panel_size = allocation->width;
174
GTK_WIDGET_CLASS (panel_menu_bar_parent_class)->size_allocate (widget, allocation);
176
PanelAppletOrient orientation = panel_applet_get_orient (PANEL_APPLET (self->priv->applet));
177
panel_menu_bar_change_orient (self->priv->applet, orientation, self);
179
179
/******************************************************************************/
180
static void /* Taken from the Trash Applet */
181
panel_menu_bar_change_background (PanelApplet *applet,
182
PanelAppletBackgroundType type,
185
PanelMenuBar *self) {
186
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
188
g_return_if_fail (IS_PANEL_MENU_BAR (self));
190
GtkRcStyle *rc_style;
194
gtk_widget_set_style (GTK_WIDGET (self), NULL);
195
rc_style = gtk_rc_style_new ();
196
gtk_widget_modify_style (GTK_WIDGET (self), rc_style);
197
gtk_rc_style_unref (rc_style);
200
case PANEL_COLOR_BACKGROUND:
201
gtk_widget_modify_bg (GTK_WIDGET (self), GTK_STATE_NORMAL, color);
203
case PANEL_PIXMAP_BACKGROUND:
204
style = gtk_style_copy (GTK_WIDGET (self)->style);
205
if (style->bg_pixmap[GTK_STATE_NORMAL] != NULL)
206
g_object_unref (style->bg_pixmap[GTK_STATE_NORMAL]);
208
style->bg_pixmap[GTK_STATE_NORMAL] = g_object_ref (pixmap);
209
gtk_widget_set_style (GTK_WIDGET (self), style);
210
g_object_unref (style);
212
case PANEL_NO_BACKGROUND:
180
static void /* Taken from the Trash Applet */
181
panel_menu_bar_change_background (PanelApplet *applet,
182
PanelAppletBackgroundType type,
185
PanelMenuBar *self) {
186
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
188
g_return_if_fail (IS_PANEL_MENU_BAR (self));
190
GtkRcStyle *rc_style;
194
gtk_widget_set_style (GTK_WIDGET (self), NULL);
195
rc_style = gtk_rc_style_new ();
196
gtk_widget_modify_style (GTK_WIDGET (self), rc_style);
197
gtk_rc_style_unref (rc_style);
200
case PANEL_COLOR_BACKGROUND:
201
gtk_widget_modify_bg (GTK_WIDGET (self), GTK_STATE_NORMAL, color);
203
case PANEL_PIXMAP_BACKGROUND:
204
style = gtk_style_copy (GTK_WIDGET (self)->style);
205
if (style->bg_pixmap[GTK_STATE_NORMAL] != NULL)
206
g_object_unref (style->bg_pixmap[GTK_STATE_NORMAL]);
208
style->bg_pixmap[GTK_STATE_NORMAL] = g_object_ref (pixmap);
209
gtk_widget_set_style (GTK_WIDGET (self), style);
210
g_object_unref (style);
212
case PANEL_NO_BACKGROUND:
217
217
/******************************************************************************/
219
219
panel_menu_bar_update_image (PanelMenuBar *self) {
220
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
222
g_return_if_fail (IS_PANEL_MENU_BAR (self));
224
GtkWidget *image = NULL;
225
AppletPreferences *a_prefs = self->priv->prefs;
226
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, 0));
228
image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (menu_browser));
231
gtk_widget_destroy (image);
234
if (a_prefs->menu_bar_prefs->show_icon) {
235
GtkWidget *icon = utils_get_scaled_image_from_file (a_prefs->menu_bar_prefs->icon,
238
icon = gtk_image_new_from_icon_name ("user-home", GTK_ICON_SIZE_BUTTON);
241
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_browser),
220
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
222
g_return_if_fail (IS_PANEL_MENU_BAR (self));
224
GtkWidget *image = NULL;
225
AppletPreferences *a_prefs = self->priv->prefs;
226
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, 0));
228
image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (menu_browser));
231
gtk_widget_destroy (image);
234
if (a_prefs->menu_bar_prefs->show_icon) {
235
GtkWidget *icon = utils_get_scaled_image_from_file (a_prefs->menu_bar_prefs->icon,
238
icon = gtk_image_new_from_icon_name ("user-home", GTK_ICON_SIZE_BUTTON);
241
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_browser),
245
245
/******************************************************************************/
246
246
#ifdef LIBGTKHOTKEY_FOUND
248
248
panel_menu_bar_on_hotkey_press (GtkHotkeyInfo *hot_key_info,
250
PanelMenuBar *self) {
251
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
253
g_return_if_fail (IS_PANEL_MENU_BAR (self));
255
MenuBrowser *menu_browser = (MenuBrowser *)(g_ptr_array_index (self->priv->file_browsers, 0));
257
GTK_MENU_SHELL (self)->active = TRUE;
258
gtk_menu_shell_set_take_focus (GTK_MENU_SHELL (self), TRUE);
259
gtk_menu_shell_select_item (GTK_MENU_SHELL (self), GTK_WIDGET (menu_browser));
250
PanelMenuBar *self) {
251
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
253
g_return_if_fail (IS_PANEL_MENU_BAR (self));
255
MenuBrowser *menu_browser = (MenuBrowser *)(g_ptr_array_index (self->priv->file_browsers, 0));
257
GTK_MENU_SHELL (self)->active = TRUE;
258
gtk_menu_shell_set_take_focus (GTK_MENU_SHELL (self), TRUE);
259
gtk_menu_shell_select_item (GTK_MENU_SHELL (self), GTK_WIDGET (menu_browser));
261
261
/******************************************************************************/
263
263
panel_menu_bar_add_keybinding (PanelMenuBar *self) {
264
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
266
g_return_if_fail (IS_PANEL_MENU_BAR (self));
268
GError *error = NULL;
270
GtkHotkeyInfo *hot_key_info = gtk_hotkey_info_new (APP_NAME,
264
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
266
g_return_if_fail (IS_PANEL_MENU_BAR (self));
268
GError *error = NULL;
270
GtkHotkeyInfo *hot_key_info = gtk_hotkey_info_new (APP_NAME,
275
g_signal_connect (G_OBJECT (hot_key_info),
277
G_CALLBACK (panel_menu_bar_on_hotkey_press),
280
gtk_hotkey_info_bind (hot_key_info, &error);
281
utils_gerror_ok (&error, TRUE);
275
g_signal_connect (G_OBJECT (hot_key_info),
277
G_CALLBACK (panel_menu_bar_on_hotkey_press),
280
gtk_hotkey_info_bind (hot_key_info, &error);
281
utils_gerror_ok (&error, TRUE);
284
284
/******************************************************************************/
286
286
panel_menu_bar_update_entry (PanelMenuBar *self,
287
PrefsChangedSignalData *signal_data) {
288
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
290
g_return_if_fail (IS_PANEL_MENU_BAR (self));
292
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, signal_data->instance));
294
menu_browser_update (MENU_BROWSER (menu_browser), signal_data->path, signal_data->label);
287
PrefsChangedSignalData *signal_data) {
288
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
290
g_return_if_fail (IS_PANEL_MENU_BAR (self));
292
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, signal_data->instance));
294
menu_browser_update (MENU_BROWSER (menu_browser), signal_data->path, signal_data->label);
296
296
/******************************************************************************/
298
298
panel_menu_bar_move_entry (PanelMenuBar *self,
299
PrefsChangedSignalData *signal_data) {
300
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
302
g_return_if_fail (IS_PANEL_MENU_BAR (self));
305
GtkWidget *menu_browser = NULL;
306
GtkWidget *menu_browser_affected = NULL;
308
if (signal_data->signal_id == PREFS_SIGNAL_DIR_MOVE_UP) {
309
new_pos = signal_data->instance - 1;
311
else if (signal_data->signal_id == PREFS_SIGNAL_DIR_MOVE_DOWN) {
312
new_pos = signal_data->instance + 1;
315
if (DEBUG) g_printf("shitzer\n"); return;
319
if (DEBUG) g_printf("shitzer\n"); return;
322
menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, signal_data->instance));
323
menu_browser_affected = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, new_pos));
325
if (menu_browser != NULL && menu_browser_affected != NULL) {
326
g_object_ref (G_OBJECT (menu_browser));
327
gtk_container_remove (GTK_CONTAINER (self), menu_browser);
328
gtk_menu_shell_insert (GTK_MENU_SHELL (self), menu_browser, new_pos);
329
g_object_unref (G_OBJECT (menu_browser));
330
self->priv->file_browsers->pdata[new_pos] = menu_browser;
331
self->priv->file_browsers->pdata[signal_data->instance] = menu_browser_affected;
334
if (DEBUG) g_printf("shitzer\n");
299
PrefsChangedSignalData *signal_data) {
300
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
302
g_return_if_fail (IS_PANEL_MENU_BAR (self));
305
GtkWidget *menu_browser = NULL;
306
GtkWidget *menu_browser_affected = NULL;
308
if (signal_data->signal_id == PREFS_SIGNAL_DIR_MOVE_UP) {
309
new_pos = signal_data->instance - 1;
311
else if (signal_data->signal_id == PREFS_SIGNAL_DIR_MOVE_DOWN) {
312
new_pos = signal_data->instance + 1;
315
if (DEBUG) g_printf("shitzer\n"); return;
319
if (DEBUG) g_printf("shitzer\n"); return;
322
menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, signal_data->instance));
323
menu_browser_affected = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, new_pos));
325
if (menu_browser != NULL && menu_browser_affected != NULL) {
326
g_object_ref (G_OBJECT (menu_browser));
327
gtk_container_remove (GTK_CONTAINER (self), menu_browser);
328
gtk_menu_shell_insert (GTK_MENU_SHELL (self), menu_browser, new_pos);
329
g_object_unref (G_OBJECT (menu_browser));
330
self->priv->file_browsers->pdata[new_pos] = menu_browser;
331
self->priv->file_browsers->pdata[signal_data->instance] = menu_browser_affected;
334
if (DEBUG) g_printf("shitzer\n");
337
337
/******************************************************************************/
339
339
panel_menu_bar_remove_entry (PanelMenuBar *self, gint instance) {
340
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
342
g_return_if_fail (IS_PANEL_MENU_BAR (self));
344
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, instance));
346
if (menu_browser != NULL) {
347
gtk_container_remove (GTK_CONTAINER (self), menu_browser);
348
g_ptr_array_remove_index (self->priv->file_browsers, instance);
351
if (DEBUG) g_printf("shitzer\n");
340
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
342
g_return_if_fail (IS_PANEL_MENU_BAR (self));
344
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, instance));
346
if (menu_browser != NULL) {
347
gtk_container_remove (GTK_CONTAINER (self), menu_browser);
348
g_ptr_array_remove_index (self->priv->file_browsers, instance);
351
if (DEBUG) g_printf("shitzer\n");
354
354
/******************************************************************************/
356
356
panel_menu_bar_add_entry (PanelMenuBar *self, const gchar *label, const gchar *path) {
357
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
359
g_return_if_fail (IS_PANEL_MENU_BAR (self));
361
GtkWidget *menu_browser = menu_browser_new (path,
363
self->priv->prefs->menu_bar_prefs->browser_prefs);
365
/* add it to the list and to the menu bar*/
366
g_ptr_array_add (self->priv->file_browsers, menu_browser);
368
gtk_menu_shell_append (GTK_MENU_SHELL (self), menu_browser);
370
gtk_widget_show_all (menu_browser);
357
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
359
g_return_if_fail (IS_PANEL_MENU_BAR (self));
361
GtkWidget *menu_browser = menu_browser_new (path,
363
self->priv->prefs->menu_bar_prefs->browser_prefs);
365
/* add it to the list and to the menu bar*/
366
g_ptr_array_add (self->priv->file_browsers, menu_browser);
368
gtk_menu_shell_append (GTK_MENU_SHELL (self), menu_browser);
370
gtk_widget_show_all (menu_browser);
372
372
/******************************************************************************/
374
374
panel_menu_bar_on_preferences_changed (AppletPreferences *a_prefs,
375
PrefsChangedSignalData *signal_data,
376
PanelMenuBar *self) {
377
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
379
g_return_if_fail (IS_PANEL_MENU_BAR (self));
381
switch (signal_data->signal_id) {
382
case PREFS_SIGNAL_TERMINAL :
383
case PREFS_SIGNAL_SHOW_HIDDEN :
385
case PREFS_SIGNAL_SHOW_ICON :
386
case PREFS_SIGNAL_ICON_CHANGED :
387
panel_menu_bar_update_image (self);
389
case PREFS_SIGNAL_DIR_MOVE_UP :
390
case PREFS_SIGNAL_DIR_MOVE_DOWN :
391
panel_menu_bar_move_entry (self, signal_data);
393
case PREFS_SIGNAL_DIR_CHANGED :
394
panel_menu_bar_update_entry (self, signal_data);
396
case PREFS_SIGNAL_DIR_ADD :
397
panel_menu_bar_add_entry (self, signal_data->label, g_strdup (signal_data->path));
399
case PREFS_SIGNAL_DIR_DEL :
400
panel_menu_bar_remove_entry (self, signal_data->instance);
402
case PREFS_SIGNAL_HORIZONTAL_TEXT :
403
panel_menu_bar_update_orient (self);
406
g_assert_not_reached ();
408
if (DEBUG) g_printf ("caught the signal: %d, ", signal_data->signal_id);
409
if (DEBUG) g_printf ("instance %d, label: %s, path %s\n",
410
signal_data->instance,
414
g_free (signal_data->label);
415
g_free (signal_data->path);
416
g_free (signal_data);
375
PrefsChangedSignalData *signal_data,
376
PanelMenuBar *self) {
377
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
379
g_return_if_fail (IS_PANEL_MENU_BAR (self));
381
switch (signal_data->signal_id) {
382
case PREFS_SIGNAL_TERMINAL :
383
case PREFS_SIGNAL_SHOW_HIDDEN :
385
case PREFS_SIGNAL_SHOW_ICON :
386
case PREFS_SIGNAL_ICON_CHANGED :
387
panel_menu_bar_update_image (self);
389
case PREFS_SIGNAL_DIR_MOVE_UP :
390
case PREFS_SIGNAL_DIR_MOVE_DOWN :
391
panel_menu_bar_move_entry (self, signal_data);
393
case PREFS_SIGNAL_DIR_CHANGED :
394
panel_menu_bar_update_entry (self, signal_data);
396
case PREFS_SIGNAL_DIR_ADD :
397
panel_menu_bar_add_entry (self, signal_data->label, g_strdup (signal_data->path));
399
case PREFS_SIGNAL_DIR_DEL :
400
panel_menu_bar_remove_entry (self, signal_data->instance);
402
case PREFS_SIGNAL_HORIZONTAL_TEXT :
403
panel_menu_bar_update_orient (self);
406
g_assert_not_reached ();
408
if (DEBUG) g_printf ("caught the signal: %d, ", signal_data->signal_id);
409
if (DEBUG) g_printf ("instance %d, label: %s, path %s\n",
410
signal_data->instance,
414
g_free (signal_data->label);
415
g_free (signal_data->path);
416
g_free (signal_data);
418
418
/******************************************************************************/
419
419
/* this function was blatantly stolen (and slightly modified) from applet.c
420
420
* from the gnome-panel code base.*/
421
421
/******************************************************************************/
423
panel_menu_bar_position_menu (GtkMenu *menu,
428
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
430
GtkRequisition requisition;
437
g_return_if_fail (PANEL_IS_APPLET (applet));
439
screen = gtk_widget_get_screen (applet);
441
gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
443
gdk_window_get_origin (applet->window, &menu_x, &menu_y);
444
gtk_widget_get_pointer (applet, &pointer_x, &pointer_y);
446
if (GTK_WIDGET_NO_WINDOW (applet)) {
447
menu_x += applet->allocation.x;
448
menu_y += applet->allocation.y;
451
if (panel_applet_get_orient (PANEL_APPLET (applet)) == PANEL_APPLET_ORIENT_UP ||
452
panel_applet_get_orient (PANEL_APPLET (applet)) == PANEL_APPLET_ORIENT_DOWN) {
453
if (gtk_widget_get_direction (GTK_WIDGET (menu)) != GTK_TEXT_DIR_RTL) {
454
if (pointer_x < applet->allocation.width &&
455
requisition.width < pointer_x) {
456
menu_x += MIN (pointer_x, applet->allocation.width - requisition.width);
460
menu_x += applet->allocation.width - requisition.width;
461
if (pointer_x > 0 && pointer_x < applet->allocation.width &&
462
pointer_x < applet->allocation.width - requisition.width) {
463
menu_x -= MIN (applet->allocation.width - pointer_x,
464
applet->allocation.width - requisition.width);
467
menu_x = MIN (menu_x, gdk_screen_get_width (screen) - requisition.width);
469
if (menu_y > gdk_screen_get_height (screen) / 2) {
470
menu_y -= requisition.height;
473
menu_y += applet->allocation.height;
477
if (pointer_y < applet->allocation.height &&
478
requisition.height < pointer_y) {
479
menu_y += MIN (pointer_y, applet->allocation.height - requisition.height);
481
menu_y = MIN (menu_y, gdk_screen_get_height (screen) - requisition.height);
483
if (menu_x > gdk_screen_get_width (screen) / 2) {
484
menu_x -= requisition.width;
487
menu_x += applet->allocation.width;
423
panel_menu_bar_position_menu (GtkMenu *menu,
428
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
430
GtkRequisition requisition;
437
g_return_if_fail (PANEL_IS_APPLET (applet));
439
screen = gtk_widget_get_screen (applet);
441
gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
443
gdk_window_get_origin (applet->window, &menu_x, &menu_y);
444
gtk_widget_get_pointer (applet, &pointer_x, &pointer_y);
446
if (GTK_WIDGET_NO_WINDOW (applet)) {
447
menu_x += applet->allocation.x;
448
menu_y += applet->allocation.y;
451
if (panel_applet_get_orient (PANEL_APPLET (applet)) == PANEL_APPLET_ORIENT_UP ||
452
panel_applet_get_orient (PANEL_APPLET (applet)) == PANEL_APPLET_ORIENT_DOWN) {
453
if (gtk_widget_get_direction (GTK_WIDGET (menu)) != GTK_TEXT_DIR_RTL) {
454
if (pointer_x < applet->allocation.width &&
455
requisition.width < pointer_x) {
456
menu_x += MIN (pointer_x, applet->allocation.width - requisition.width);
460
menu_x += applet->allocation.width - requisition.width;
461
if (pointer_x > 0 && pointer_x < applet->allocation.width &&
462
pointer_x < applet->allocation.width - requisition.width) {
463
menu_x -= MIN (applet->allocation.width - pointer_x,
464
applet->allocation.width - requisition.width);
467
menu_x = MIN (menu_x, gdk_screen_get_width (screen) - requisition.width);
469
if (menu_y > gdk_screen_get_height (screen) / 2) {
470
menu_y -= requisition.height;
473
menu_y += applet->allocation.height;
477
if (pointer_y < applet->allocation.height &&
478
requisition.height < pointer_y) {
479
menu_y += MIN (pointer_y, applet->allocation.height - requisition.height);
481
menu_y = MIN (menu_y, gdk_screen_get_height (screen) - requisition.height);
483
if (menu_x > gdk_screen_get_width (screen) / 2) {
484
menu_x -= requisition.width;
487
menu_x += applet->allocation.width;
495
495
/******************************************************************************/
497
497
panel_menu_bar_on_deactivate (GtkWidget *widget,
498
PanelMenuBar *self) {
499
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
501
g_return_if_fail (IS_PANEL_MENU_BAR (self));
503
g_object_set (G_OBJECT (self), "has-tooltip", TRUE, NULL);
505
/* this is here because of the solution to the focus problem caused by the
506
* popped context menu */
507
gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
509
for (i=0; i < self->priv->file_browsers->len; i++) {
510
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, i));
511
gtk_widget_set_sensitive (menu_browser, TRUE);
498
PanelMenuBar *self) {
499
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
501
g_return_if_fail (IS_PANEL_MENU_BAR (self));
503
g_object_set (G_OBJECT (self), "has-tooltip", TRUE, NULL);
505
/* this is here because of the solution to the focus problem caused by the
506
* popped context menu */
507
gtk_widget_set_sensitive (GTK_WIDGET (self), TRUE);
509
for (i=0; i < self->priv->file_browsers->len; i++) {
510
GtkWidget *menu_browser = (GtkWidget *)(g_ptr_array_index (self->priv->file_browsers, i));
511
gtk_widget_set_sensitive (menu_browser, TRUE);
514
514
/******************************************************************************/
516
516
panel_menu_bar_on_button_press (GtkWidget *widget,
517
GdkEventButton *event,
518
PanelMenuBar *self) {
519
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
521
g_return_val_if_fail (IS_PANEL_MENU_BAR (self), TRUE);
523
GtkMenuShell *menu_shell = GTK_MENU_SHELL (self);
525
if (event->button == 3) {
526
if (!menu_shell->active) {
527
/* popup the applet context menu on right-clicks and make sure it's
528
* popped up in the right place */
529
gtk_menu_shell_deactivate (GTK_MENU_SHELL (self));
531
bonobo_control_do_popup_full (self->priv->bonobo_control,
534
(GtkMenuPositionFunc) panel_menu_bar_position_menu,
542
else if (event->button == 2) {
543
/* Do nothing on middle-clicks */
547
/* Activate the menu only on left-clicks */
548
g_object_set (G_OBJECT (self), "has-tooltip", FALSE, NULL);
517
GdkEventButton *event,
518
PanelMenuBar *self) {
519
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
521
g_return_val_if_fail (IS_PANEL_MENU_BAR (self), TRUE);
523
GtkMenuShell *menu_shell = GTK_MENU_SHELL (self);
525
if (event->button == 3) {
526
if (!menu_shell->active) {
527
/* popup the applet context menu on right-clicks and make sure it's
528
* popped up in the right place */
529
gtk_menu_shell_deactivate (GTK_MENU_SHELL (self));
531
bonobo_control_do_popup_full (self->priv->bonobo_control,
534
(GtkMenuPositionFunc) panel_menu_bar_position_menu,
542
else if (event->button == 2) {
543
/* Do nothing on middle-clicks */
547
/* Activate the menu only on left-clicks */
548
g_object_set (G_OBJECT (self), "has-tooltip", FALSE, NULL);
552
552
/******************************************************************************/
554
554
panel_menu_bar_on_key_press (GtkWidget *widget,
556
PanelMenuBar *self) {
557
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
559
g_return_val_if_fail (IS_PANEL_MENU_BAR (self), TRUE);
561
if ((event->keyval == GDK_Menu) ||
562
(event->keyval == GDK_F10 &&
563
(event->state & gtk_accelerator_get_default_mod_mask ()) == GDK_SHIFT_MASK)){
564
bonobo_control_do_popup_full (self->priv->bonobo_control,
567
(GtkMenuPositionFunc) panel_menu_bar_position_menu,
573
g_object_set (G_OBJECT (self), "has-tooltip", FALSE, NULL);
556
PanelMenuBar *self) {
557
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
559
g_return_val_if_fail (IS_PANEL_MENU_BAR (self), TRUE);
561
if ((event->keyval == GDK_Menu) ||
562
(event->keyval == GDK_F10 &&
563
(event->state & gtk_accelerator_get_default_mod_mask ()) == GDK_SHIFT_MASK)){
564
bonobo_control_do_popup_full (self->priv->bonobo_control,
567
(GtkMenuPositionFunc) panel_menu_bar_position_menu,
573
g_object_set (G_OBJECT (self), "has-tooltip", FALSE, NULL);
576
576
/******************************************************************************/
578
578
panel_menu_bar_new (PanelApplet* applet) {
579
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
581
g_return_val_if_fail (PANEL_IS_APPLET (applet), NULL);
583
PanelMenuBar *self = g_object_newv (TYPE_PANEL_MENU_BAR, 0, NULL);
585
g_signal_connect (GTK_MENU_BAR (self),
586
"button_press_event",
587
G_CALLBACK (panel_menu_bar_on_button_press),
589
g_signal_connect (GTK_MENU_BAR (self),
591
G_CALLBACK (panel_menu_bar_on_key_press),
594
g_signal_connect (GTK_MENU_SHELL (self),
596
G_CALLBACK (panel_menu_bar_on_deactivate),
599
self->priv->file_browsers = g_ptr_array_new ();
601
self->priv->panel_size= 0;
602
self->priv->applet = applet;
604
/* setup callbacks to handle changes in the panel */
605
g_signal_connect (G_OBJECT (applet),
607
G_CALLBACK (panel_menu_bar_change_background),
609
g_signal_connect (G_OBJECT (applet),
611
G_CALLBACK (panel_menu_bar_change_orient),
579
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
581
g_return_val_if_fail (PANEL_IS_APPLET (applet), NULL);
583
PanelMenuBar *self = g_object_newv (TYPE_PANEL_MENU_BAR, 0, NULL);
585
g_signal_connect (GTK_MENU_BAR (self),
586
"button_press_event",
587
G_CALLBACK (panel_menu_bar_on_button_press),
589
g_signal_connect (GTK_MENU_BAR (self),
591
G_CALLBACK (panel_menu_bar_on_key_press),
594
g_signal_connect (GTK_MENU_SHELL (self),
596
G_CALLBACK (panel_menu_bar_on_deactivate),
599
self->priv->file_browsers = g_ptr_array_new ();
601
self->priv->panel_size= 0;
602
self->priv->applet = applet;
604
/* setup callbacks to handle changes in the panel */
605
g_signal_connect (G_OBJECT (applet),
607
G_CALLBACK (panel_menu_bar_change_background),
609
g_signal_connect (G_OBJECT (applet),
611
G_CALLBACK (panel_menu_bar_change_orient),
614
614
gtk_widget_set_tooltip_text (GTK_WIDGET (self), _(TOOLTIP_TEXT));
616
/* get the applet configuration */
617
self->priv->prefs = applet_preferences_new (applet);
619
MenuBarPrefs *mb_prefs = self->priv->prefs->menu_bar_prefs;
620
g_signal_connect (G_OBJECT (self->priv->prefs),
622
G_CALLBACK (panel_menu_bar_on_preferences_changed),
625
/* for each path in the config, make a browser object */
626
GSList *tmp_dir = mb_prefs->dirs;
627
GSList *tmp_label = mb_prefs->labels;
628
while (tmp_label && tmp_dir) {
629
panel_menu_bar_add_entry (self,
630
(gchar*)tmp_label->data,
631
(gchar*)tmp_dir->data);
632
tmp_dir = tmp_dir->next;
633
tmp_label = tmp_label->next;
616
/* get the applet configuration */
617
self->priv->prefs = applet_preferences_new (applet);
619
MenuBarPrefs *mb_prefs = self->priv->prefs->menu_bar_prefs;
620
g_signal_connect (G_OBJECT (self->priv->prefs),
622
G_CALLBACK (panel_menu_bar_on_preferences_changed),
625
/* for each path in the config, make a browser object */
626
GSList *tmp_dir = mb_prefs->dirs;
627
GSList *tmp_label = mb_prefs->labels;
628
while (tmp_label && tmp_dir) {
629
panel_menu_bar_add_entry (self,
630
(gchar*)tmp_label->data,
631
(gchar*)tmp_dir->data);
632
tmp_dir = tmp_dir->next;
633
tmp_label = tmp_label->next;
636
636
/* add the image to the menu item */
637
panel_menu_bar_update_image (self);
639
gtk_container_add (GTK_CONTAINER (applet), GTK_WIDGET (self));
641
/* make sure the text orientation is correct on startup */
642
self->priv->text_vertical = FALSE;
644
/* get a handle to the applet context menu */
645
self->priv->bonobo_control = panel_applet_get_control (applet);
637
panel_menu_bar_update_image (self);
639
gtk_container_add (GTK_CONTAINER (applet), GTK_WIDGET (self));
641
/* make sure the text orientation is correct on startup */
642
self->priv->text_vertical = FALSE;
644
/* get a handle to the applet context menu */
645
self->priv->bonobo_control = panel_applet_get_control (applet);
647
647
#ifdef LIBGTKHOTKEY_FOUND
648
/* setup global keybinding */
649
panel_menu_bar_add_keybinding (self);
648
/* setup global keybinding */
649
panel_menu_bar_add_keybinding (self);
654
654
/******************************************************************************/
655
655
static void panel_menu_bar_class_init (PanelMenuBarClass * klass) {
656
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
658
panel_menu_bar_parent_class = g_type_class_peek_parent (klass);
659
g_type_class_add_private (klass, sizeof (PanelMenuBarPrivate));
660
G_OBJECT_CLASS (klass)->dispose = panel_menu_bar_dispose;
662
/* GObjectClass *gobject_class = (GObjectClass *) klass;*/
663
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
664
widget_class->size_allocate = panel_menu_bar_size_allocate;
666
gtk_rc_parse_string ("style \"panel-menubar-style\"\n"
668
" GtkMenuBar::shadow-type = none\n"
669
" GtkMenuBar::internal-padding = 0\n"
671
"class \"PanelMenuBar\" style \"panel-menubar-style\"");
656
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
658
panel_menu_bar_parent_class = g_type_class_peek_parent (klass);
659
g_type_class_add_private (klass, sizeof (PanelMenuBarPrivate));
660
G_OBJECT_CLASS (klass)->dispose = panel_menu_bar_dispose;
662
/* GObjectClass *gobject_class = (GObjectClass *) klass;*/
663
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
664
widget_class->size_allocate = panel_menu_bar_size_allocate;
666
gtk_rc_parse_string ("style \"panel-menubar-style\"\n"
668
" GtkMenuBar::shadow-type = none\n"
669
" GtkMenuBar::internal-padding = 0\n"
671
"class \"PanelMenuBar\" style \"panel-menubar-style\"");
673
673
/******************************************************************************/
675
675
panel_menu_bar_init (PanelMenuBar * self) {
676
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
678
g_return_if_fail (IS_PANEL_MENU_BAR (self));
680
self->priv = PANEL_MENU_BAR_GET_PRIVATE (self);
676
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
678
g_return_if_fail (IS_PANEL_MENU_BAR (self));
680
self->priv = PANEL_MENU_BAR_GET_PRIVATE (self);
682
682
/******************************************************************************/
684
684
panel_menu_bar_dispose (GObject *obj) {
685
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
687
PanelMenuBarClass *klass;
688
/* GObjectClass * parent_class;*/
690
PanelMenuBar *self = PANEL_MENU_BAR (obj);
691
(self->priv->applet == NULL ? NULL : (self->priv->applet = (g_object_unref (self->priv->applet), NULL)));
692
(self->priv->file_browsers == NULL ? NULL : (self->priv->file_browsers = (gpointer)(g_ptr_array_free (self->priv->file_browsers, TRUE))));
693
klass = PANEL_MENU_BAR_CLASS (g_type_class_peek (TYPE_PANEL_MENU_BAR));
694
G_OBJECT_CLASS (panel_menu_bar_parent_class)->dispose (obj);
685
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
687
PanelMenuBarClass *klass;
688
/* GObjectClass * parent_class;*/
690
PanelMenuBar *self = PANEL_MENU_BAR (obj);
691
(self->priv->applet == NULL ? NULL : (self->priv->applet = (g_object_unref (self->priv->applet), NULL)));
692
(self->priv->file_browsers == NULL ? NULL : (self->priv->file_browsers = (gpointer)(g_ptr_array_free (self->priv->file_browsers, TRUE))));
693
klass = PANEL_MENU_BAR_CLASS (g_type_class_peek (TYPE_PANEL_MENU_BAR));
694
G_OBJECT_CLASS (panel_menu_bar_parent_class)->dispose (obj);
696
696
/******************************************************************************/
698
698
panel_menu_bar_get_type (void) {
699
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
701
static GType panel_menu_bar_type_id = 0;
702
if (G_UNLIKELY (panel_menu_bar_type_id == 0)) {
703
static const GTypeInfo g_define_type_info = {sizeof (PanelMenuBarClass),
704
(GBaseInitFunc) NULL,
705
(GBaseFinalizeFunc) NULL,
706
(GClassInitFunc) panel_menu_bar_class_init,
707
(GClassFinalizeFunc) NULL,
709
sizeof (PanelMenuBar),
711
(GInstanceInitFunc) panel_menu_bar_init };
713
panel_menu_bar_type_id = g_type_register_static (GTK_TYPE_MENU_BAR,
718
return panel_menu_bar_type_id;
699
if (DEBUG) g_printf ("In %s\n", __FUNCTION__);
701
static GType panel_menu_bar_type_id = 0;
702
if (G_UNLIKELY (panel_menu_bar_type_id == 0)) {
703
static const GTypeInfo g_define_type_info = {sizeof (PanelMenuBarClass),
704
(GBaseInitFunc) NULL,
705
(GBaseFinalizeFunc) NULL,
706
(GClassInitFunc) panel_menu_bar_class_init,
707
(GClassFinalizeFunc) NULL,
709
sizeof (PanelMenuBar),
711
(GInstanceInitFunc) panel_menu_bar_init };
713
panel_menu_bar_type_id = g_type_register_static (GTK_TYPE_MENU_BAR,
718
return panel_menu_bar_type_id;
720
720
/******************************************************************************/