557
panel_menu_button_gconf_notify (GConfClient *client,
560
PanelMenuButton *button)
509
panel_menu_button_settings_changed (GSettings *settings,
511
PanelMenuButton *button)
565
key = panel_gconf_basename (gconf_entry_get_key (entry));
567
value = entry->value;
569
if (!strcmp (key, "menu_path")) {
570
if (value && value->type == GCONF_VALUE_STRING)
571
panel_menu_button_set_menu_path (button,
572
gconf_value_get_string (value));
573
} else if (!strcmp (key, "custom_icon")) {
574
if (value && value->type == GCONF_VALUE_STRING)
575
panel_menu_button_set_custom_icon (button,
576
gconf_value_get_string (value));
577
} else if (!strcmp (key, "tooltip")) {
578
if (value && value->type == GCONF_VALUE_STRING)
579
panel_menu_button_set_tooltip (button,
580
gconf_value_get_string (value));
581
} else if (!strcmp (key, "use_menu_path")) {
582
if (value && value->type == GCONF_VALUE_BOOL)
583
panel_menu_button_set_use_menu_path (button,
584
gconf_value_get_bool (value));
585
} else if (!strcmp (key, "use_custom_icon")) {
586
if (value && value->type == GCONF_VALUE_BOOL)
587
panel_menu_button_set_use_custom_icon (button,
588
gconf_value_get_bool (value));
515
if (g_strcmp0 (key, PANEL_MENU_BUTTON_MENU_PATH_KEY) == 0) {
516
value = g_settings_get_string (settings, key);
517
panel_menu_button_set_menu_path (button, value);
518
} else if (g_strcmp0 (key, PANEL_MENU_BUTTON_CUSTOM_ICON_KEY) == 0) {
519
value = g_settings_get_string (settings, key);
520
panel_menu_button_set_custom_icon (button, value);
521
} else if (g_strcmp0 (key, PANEL_MENU_BUTTON_TOOLTIP_KEY) == 0) {
522
value = g_settings_get_string (settings, key);
523
panel_menu_button_set_tooltip (button, value);
593
panel_menu_button_connect_to_gconf (PanelMenuButton *button)
598
client = panel_gconf_get_client ();
600
key = panel_gconf_sprintf (PANEL_CONFIG_DIR "/objects/%s",
601
button->priv->applet_id);
602
gconf_client_add_dir (client, key, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
603
button->priv->gconf_notify =
604
gconf_client_notify_add (client, key,
605
(GConfClientNotifyFunc) panel_menu_button_gconf_notify,
610
panel_menu_button_disconnect_from_gconf (PanelMenuButton *button)
615
if (!button->priv->gconf_notify)
618
client = panel_gconf_get_client ();
620
key = panel_gconf_sprintf (PANEL_CONFIG_DIR "/objects/%s",
621
button->priv->applet_id);
623
gconf_client_notify_remove (client, button->priv->gconf_notify);
624
button->priv->gconf_notify = 0;
626
gconf_client_remove_dir (client, key, NULL);
630
panel_menu_button_load (const char *menu_path,
631
gboolean use_menu_path,
632
const char *custom_icon,
633
gboolean use_custom_icon,
530
panel_menu_button_load_helper (const char *menu_path,
531
const char *custom_icon,
641
537
PanelMenuButton *button;
642
538
AppletInfo *info;
647
543
"menu-path", menu_path,
648
544
"custom-icon", custom_icon,
649
545
"tooltip", tooltip,
650
"use-menu-path", use_menu_path,
651
"use-custom-icon", use_custom_icon,
652
546
"has-arrow", TRUE,
655
info = panel_applet_register (GTK_WIDGET (button), NULL, NULL,
656
panel, locked, position, exactpos,
657
PANEL_OBJECT_MENU, id);
549
info = panel_applet_register (GTK_WIDGET (button),
551
PANEL_OBJECT_MENU, id,
659
555
gtk_widget_destroy (GTK_WIDGET (button));
663
button->priv->applet_id = g_strdup (info->id);
665
panel_applet_add_callback (info, "help", GTK_STOCK_HELP, _("_Help"), NULL);
667
559
if (panel_is_program_in_path ("alacarte") ||
668
560
panel_is_program_in_path ("gmenu-simple-editor"))
669
561
panel_applet_add_callback (info, "edit", NULL,
670
_("_Edit Menus"), NULL);
563
panel_lockdown_get_not_panels_locked_down_s);
672
565
panel_widget_set_applet_expandable (panel, GTK_WIDGET (button), FALSE, TRUE);
673
566
panel_widget_set_applet_size_constrained (panel, GTK_WIDGET (button), TRUE);
675
panel_menu_button_connect_to_gconf (button);
568
button->priv->settings_instance = panel_layout_get_instance_settings (
570
PANEL_MENU_BUTTON_SCHEMA);
677
panel_lockdown_notify_add (G_CALLBACK (panel_menu_button_recreate_menu),
572
g_signal_connect (button->priv->settings_instance, "changed",
573
G_CALLBACK (panel_menu_button_settings_changed),
816
718
g_return_if_fail (PANEL_IS_MENU_BUTTON (button));
818
720
g_free (button->priv->tooltip);
819
button->priv->tooltip = NULL;
821
if (tooltip && tooltip [0]) {
822
button->priv->tooltip = g_strdup (tooltip);
823
panel_util_set_tooltip_text (GTK_WIDGET (button), tooltip);
828
panel_menu_button_set_use_menu_path (PanelMenuButton *button,
829
gboolean use_menu_path)
831
g_return_if_fail (PANEL_IS_MENU_BUTTON (button));
833
use_menu_path = use_menu_path != FALSE;
835
if (button->priv->use_menu_path == use_menu_path)
838
button->priv->use_menu_path = use_menu_path;
840
if (button->priv->menu)
841
gtk_menu_detach (GTK_MENU (button->priv->menu));
842
button->priv->menu = NULL;
844
panel_menu_button_set_icon (button);
848
panel_menu_button_get_use_menu_path (PanelMenuButton *button)
850
g_return_val_if_fail (PANEL_IS_MENU_BUTTON (button), FALSE);
852
return button->priv->use_menu_path;
856
panel_menu_button_set_use_custom_icon (PanelMenuButton *button,
857
gboolean use_custom_icon)
859
g_return_if_fail (PANEL_IS_MENU_BUTTON (button));
861
button->priv->use_custom_icon = use_custom_icon != FALSE;
863
panel_menu_button_set_icon (button);
867
panel_menu_button_load_from_gconf (PanelWidget *panel,
878
gboolean use_menu_path;
879
gboolean use_custom_icon;
881
client = panel_gconf_get_client ();
883
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "menu_path");
884
menu_path = gconf_client_get_string (client, key, NULL);
886
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "custom_icon");
887
custom_icon = gconf_client_get_string (client, key, NULL);
889
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "tooltip");
890
tooltip = gconf_client_get_string (client, key, NULL);
892
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "use_menu_path");
893
use_menu_path = gconf_client_get_bool (client, key, NULL);
895
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "use_custom_icon");
896
use_custom_icon = gconf_client_get_bool (client, key, NULL);
898
panel_menu_button_load (menu_path,
721
button->priv->tooltip = g_strdup (tooltip);
723
panel_util_set_tooltip_text (GTK_WIDGET (button), tooltip);
727
panel_menu_button_load (PanelWidget *panel,
731
GSettings *settings_instance;
738
settings_instance = panel_layout_get_instance_settings (settings,
739
PANEL_MENU_BUTTON_SCHEMA);
741
menu_path = g_settings_get_string (settings_instance,
742
PANEL_MENU_BUTTON_MENU_PATH_KEY);
743
custom_icon = g_settings_get_string (settings_instance,
744
PANEL_MENU_BUTTON_CUSTOM_ICON_KEY);
745
tooltip = g_settings_get_string (settings_instance,
746
PANEL_MENU_BUTTON_TOOLTIP_KEY);
748
scheme = g_strndup (menu_path, strcspn (menu_path, ":"));
749
root = panel_menu_scheme_to_path_root (scheme);
752
panel_menu_button_load_helper (menu_path,
909
759
g_free (menu_path);
910
760
g_free (custom_icon);
911
761
g_free (tooltip);
763
g_object_unref (settings_instance);
915
panel_menu_button_create (PanelToplevel *toplevel,
917
const char *filename,
918
const char *menu_path,
919
gboolean use_menu_path,
767
panel_menu_button_create (PanelToplevel *toplevel,
768
PanelObjectPackType pack_type,
770
const char *filename,
771
const char *menu_path,
927
client = panel_gconf_get_client ();
929
id = panel_profile_prepare_object (PANEL_OBJECT_MENU, toplevel, position, FALSE);
931
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "use_menu_path");
932
gconf_client_set_bool (client, key, use_menu_path, NULL);
776
GSettings *settings_instance;
934
779
scheme = panel_menu_filename_to_scheme (filename);
936
781
if (filename && !scheme) {
937
782
g_warning ("Failed to find menu scheme for %s\n", filename);
942
if (use_menu_path && menu_path && menu_path [0] && scheme) {
786
id = panel_layout_object_create_start (PANEL_OBJECT_MENU, NULL,
787
panel_toplevel_get_id (toplevel),
788
pack_type, pack_index,
791
settings_instance = panel_layout_get_instance_settings (settings,
792
PANEL_MENU_BUTTON_SCHEMA);
794
if (!PANEL_GLIB_STR_EMPTY (menu_path) && scheme) {
945
797
menu_uri = g_strconcat (scheme, ":", menu_path, NULL);
947
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "menu_path");
948
gconf_client_set_string (client, key, menu_uri, NULL);
799
g_settings_set_string (settings_instance,
800
PANEL_MENU_BUTTON_MENU_PATH_KEY,
950
803
g_free (menu_uri);
953
if (tooltip && tooltip [0]) {
954
key = panel_gconf_full_key (PANEL_GCONF_OBJECTS, id, "tooltip");
955
gconf_client_set_string (client, key, tooltip, NULL);
806
if (!PANEL_GLIB_STR_EMPTY (tooltip)) {
807
g_settings_set_string (settings_instance,
808
PANEL_MENU_BUTTON_TOOLTIP_KEY,
958
panel_profile_add_to_list (PANEL_GCONF_OBJECTS, id);
812
panel_layout_object_create_finish (id);
814
g_object_unref (settings_instance);
815
g_object_unref (settings);