43
42
#include "panel-toplevel.h"
44
43
#include "panel-menu-button.h"
45
44
#include "panel-globals.h"
45
#include "panel-layout.h"
46
46
#include "panel-lockdown.h"
47
47
#include "panel-util.h"
48
#include "panel-profile.h"
49
48
#include "panel-addto.h"
50
49
#include "panel-icon-names.h"
50
#include "panel-user-menu.h"
53
53
PanelWidget *panel_widget;
173
{ PANEL_ADDTO_DRAWER,
175
N_("A pop out drawer to store other items in"),
173
{ PANEL_ADDTO_USER_MENU,
175
N_("Menu to change your settings and your online status"),
176
PANEL_ICON_USER_AVAILABLE,
177
177
PANEL_ACTION_NONE,
325
326
const GtkTargetEntry *target,
326
327
const char *text)
328
if (!text || panel_lockdown_get_locked_down ())
329
if (!text || panel_lockdown_get_panels_locked_down_s ())
331
332
gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (tree_view),
400
401
description = panel_applet_info_get_description (info);
401
402
icon = panel_applet_info_get_icon (info);
403
if (!name || panel_lockdown_is_applet_disabled (iid)) {
405
panel_lockdown_is_applet_disabled (panel_lockdown_get (),
479
482
if (special_addto_items [i].type == PANEL_ADDTO_LAUNCHER_NEW
480
&& panel_lockdown_get_disable_command_line ())
483
&& panel_lockdown_get_disable_command_line_s ())
483
486
panel_addto_append_item (dialog, model, &special_addto_items [i]);
495
498
if (dialog->filter_applet_model != NULL)
498
if (panel_profile_id_lists_are_writable ()) {
501
if (panel_layout_is_writable ()) {
499
502
dialog->applet_list = panel_addto_query_applets (dialog->applet_list);
500
503
dialog->applet_list = panel_addto_prepend_internal_applets (dialog->applet_list);
512
if (panel_profile_id_lists_are_writable ()) {
515
if (panel_layout_is_writable ()) {
513
516
panel_addto_append_special_applets (dialog, model);
514
517
if (dialog->applet_list)
515
518
panel_addto_append_item (dialog, model, NULL);
529
static void panel_addto_make_application_list (GSList **parent_list,
530
GMenuTreeDirectory *directory,
531
const char *filename);
533
PANEL_ADDTO_MENU_SHOW_DIRECTORIES = 1 << 0,
534
PANEL_ADDTO_MENU_SHOW_ENTRIES = 1 << 1,
535
PANEL_ADDTO_MENU_SHOW_ALIAS = 1 << 2
536
#define PANEL_ADDTO_MENU_SHOW_ALL (PANEL_ADDTO_MENU_SHOW_DIRECTORIES | PANEL_ADDTO_MENU_SHOW_ENTRIES | PANEL_ADDTO_MENU_SHOW_ALIAS)
537
} PanelAddtoMenuShowFlags;
539
static void panel_addto_make_application_list (GSList **parent_list,
540
GMenuTreeDirectory *directory,
541
const char *filename,
542
PanelAddtoMenuShowFlags show_flags);
534
545
panel_addto_prepend_directory (GSList **parent_list,
558
569
*parent_list = g_slist_prepend (*parent_list, data);
560
panel_addto_make_application_list (&data->children, directory, filename);
571
/* We always want to show everything in non-root directories */
572
panel_addto_make_application_list (&data->children, directory,
573
filename, PANEL_ADDTO_MENU_SHOW_ALL);
612
panel_addto_make_application_list (GSList **parent_list,
613
GMenuTreeDirectory *directory,
614
const char *filename)
625
panel_addto_make_application_list (GSList **parent_list,
626
GMenuTreeDirectory *directory,
627
const char *filename,
628
PanelAddtoMenuShowFlags show_flags)
621
635
for (l = items; l; l = l->next) {
622
636
switch (gmenu_tree_item_get_type (l->data)) {
623
637
case GMENU_TREE_ITEM_DIRECTORY:
624
panel_addto_prepend_directory (parent_list, l->data, filename);
638
if (show_flags & PANEL_ADDTO_MENU_SHOW_DIRECTORIES)
639
panel_addto_prepend_directory (parent_list, l->data, filename);
627
642
case GMENU_TREE_ITEM_ENTRY:
628
panel_addto_prepend_entry (parent_list, l->data, filename);
643
if (show_flags & PANEL_ADDTO_MENU_SHOW_ENTRIES)
644
panel_addto_prepend_entry (parent_list, l->data, filename);
631
647
case GMENU_TREE_ITEM_ALIAS:
632
panel_addto_prepend_alias (parent_list, l->data, filename);
648
if (show_flags & PANEL_ADDTO_MENU_SHOW_ALIAS)
649
panel_addto_prepend_alias (parent_list, l->data, filename);
703
720
if ((root = gmenu_tree_get_root_directory (tree))) {
704
721
panel_addto_make_application_list (&dialog->application_list,
705
root, "applications.menu");
722
root, "applications.menu",
723
PANEL_ADDTO_MENU_SHOW_ALL);
706
724
panel_addto_populate_application_model (store, NULL, dialog->application_list);
708
726
gmenu_tree_item_unref (root);
711
729
gmenu_tree_unref (tree);
713
tree = gmenu_tree_lookup ("settings.menu", GMENU_TREE_FLAGS_NONE);
731
tree = gmenu_tree_lookup ("gnomecc.menu", GMENU_TREE_FLAGS_NONE);
714
732
gmenu_tree_set_sort_key (tree, GMENU_TREE_SORT_DISPLAY_NAME);
716
734
if ((root = gmenu_tree_get_root_directory (tree))) {
724
742
COLUMN_SEARCH, NULL,
745
/* The gnome-control-center shell does not display toplevel
746
* entries that are not directories, so do the same. */
727
747
panel_addto_make_application_list (&dialog->settings_list,
728
root, "settings.menu");
748
root, "gnomecc.menu",
749
PANEL_ADDTO_MENU_SHOW_DIRECTORIES);
729
750
panel_addto_populate_application_model (store, NULL,
730
751
dialog->settings_list);
746
767
panel_addto_add_item (PanelAddtoDialog *dialog,
747
768
PanelAddtoItemInfo *item_info)
749
772
g_assert (item_info != NULL);
774
pack_index = panel_widget_get_new_pack_index (dialog->panel_widget,
775
dialog->insert_pack_type);
751
777
switch (item_info->type) {
752
778
case PANEL_ADDTO_APPLET:
753
779
panel_applet_frame_create (dialog->panel_widget->toplevel,
754
dialog->insertion_position,
780
dialog->insert_pack_type,
757
784
case PANEL_ADDTO_ACTION:
758
785
panel_action_button_create (dialog->panel_widget->toplevel,
759
dialog->insertion_position,
786
dialog->insert_pack_type,
760
788
item_info->action_type);
762
790
case PANEL_ADDTO_LAUNCHER_MENU:
765
793
case PANEL_ADDTO_LAUNCHER:
766
794
panel_launcher_create (dialog->panel_widget->toplevel,
767
dialog->insertion_position,
795
dialog->insert_pack_type,
768
797
item_info->launcher_path);
770
799
case PANEL_ADDTO_LAUNCHER_NEW:
771
800
ask_about_launcher (NULL, dialog->panel_widget,
772
dialog->insertion_position, FALSE);
801
dialog->insert_pack_type);
774
803
case PANEL_ADDTO_MENU:
775
804
panel_menu_button_create (dialog->panel_widget->toplevel,
776
dialog->insertion_position,
805
dialog->insert_pack_type,
777
807
item_info->menu_filename,
778
808
item_info->menu_path,
779
item_info->menu_path != NULL,
780
809
item_info->name);
782
811
case PANEL_ADDTO_MENUBAR:
783
812
panel_menu_bar_create (dialog->panel_widget->toplevel,
784
dialog->insertion_position);
813
dialog->insert_pack_type,
786
816
case PANEL_ADDTO_SEPARATOR:
787
817
panel_separator_create (dialog->panel_widget->toplevel,
788
dialog->insertion_position);
818
dialog->insert_pack_type,
790
case PANEL_ADDTO_DRAWER:
791
panel_drawer_create (dialog->panel_widget->toplevel,
792
dialog->insertion_position,
821
case PANEL_ADDTO_USER_MENU:
822
panel_user_menu_create (dialog->panel_widget->toplevel,
823
dialog->insert_pack_type,
956
987
panel_addto_dialog_free (PanelAddtoDialog *dialog)
961
client = panel_gconf_get_client ();
963
991
if (dialog->name_notify)
964
gconf_client_notify_remove (client, dialog->name_notify);
992
g_signal_handler_disconnect (dialog->panel_widget->toplevel,
993
dialog->name_notify);
965
994
dialog->name_notify = 0;
967
996
if (dialog->search_text)
1017
panel_addto_name_change (PanelAddtoDialog *dialog,
1046
panel_addto_name_change (PanelAddtoDialog *dialog)
1051
name = panel_toplevel_get_name (dialog->panel_widget->toplevel);
1025
1054
if (!PANEL_GLIB_STR_EMPTY (name))
1026
1055
label = g_strdup_printf (_("Find an _item to add to \"%s\":"),
1029
if (panel_toplevel_get_is_attached (dialog->panel_widget->toplevel)) {
1030
title = g_strdup_printf (_("Add to Drawer"));
1032
label = g_strdup (_("Find an _item to add to the drawer:"));
1034
title = g_strdup_printf (_("Add to Panel"));
1036
label = g_strdup (_("Find an _item to add to the panel:"));
1059
label = g_strdup (_("Find an _item to add to the panel:"));
1039
gtk_window_set_title (GTK_WINDOW (dialog->addto_dialog), title);
1061
gtk_window_set_title (GTK_WINDOW (dialog->addto_dialog),
1042
1064
gtk_label_set_text_with_mnemonic (GTK_LABEL (dialog->label), label);
1043
1065
g_free (label);
1047
panel_addto_name_notify (GConfClient *client,
1069
panel_addto_name_notify (GObject *gobject,
1050
1071
PanelAddtoDialog *dialog)
1054
const char *text = NULL;
1056
key = panel_gconf_basename (gconf_entry_get_key (entry));
1058
if (strcmp (key, "name"))
1061
value = gconf_entry_get_value (entry);
1063
if (value && value->type == GCONF_VALUE_STRING)
1064
text = gconf_value_get_string (value);
1067
panel_addto_name_change (dialog, text);
1073
panel_addto_name_change (dialog);
1070
1076
static gboolean
1187
1193
/* only allow dragging applets if we can add applets */
1188
if (panel_profile_id_lists_are_writable ()) {
1194
if (panel_layout_is_writable ()) {
1189
1195
switch (data->type) {
1190
1196
case PANEL_ADDTO_LAUNCHER:
1191
1197
panel_addto_setup_launcher_drag (GTK_TREE_VIEW (dialog->tree_view),
1269
1274
dialog->panel_widget = panel_widget;
1270
1275
dialog->name_notify =
1271
panel_profile_toplevel_notify_add (
1272
dialog->panel_widget->toplevel,
1274
(GConfClientNotifyFunc) panel_addto_name_notify,
1276
g_signal_connect (dialog->panel_widget->toplevel,
1278
G_CALLBACK (panel_addto_name_notify),
1278
1281
dialog->addto_dialog = gtk_dialog_new ();
1279
1282
gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
1288
1291
GTK_STOCK_CLOSE,
1289
1292
GTK_RESPONSE_CLOSE);
1290
1293
gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
1291
gtk_dialog_set_has_separator (GTK_DIALOG (dialog->addto_dialog),
1293
1294
gtk_dialog_set_default_response (GTK_DIALOG (dialog->addto_dialog),
1294
1295
PANEL_ADDTO_RESPONSE_ADD);
1296
1297
gtk_container_set_border_width (GTK_CONTAINER (dialog->addto_dialog), 5);
1298
1299
dialog_vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog->addto_dialog));
1299
gtk_box_set_spacing (GTK_BOX (dialog_vbox), 2);
1300
gtk_box_set_spacing (GTK_BOX (dialog_vbox), 12);
1301
gtk_container_set_border_width (GTK_CONTAINER (dialog_vbox), 5);
1301
1303
g_signal_connect (G_OBJECT (dialog->addto_dialog), "response",
1302
1304
G_CALLBACK (panel_addto_dialog_response), dialog);
1303
1305
g_signal_connect (dialog->addto_dialog, "destroy",
1304
1306
G_CALLBACK (panel_addto_dialog_destroy), dialog);
1306
vbox = gtk_vbox_new (FALSE, 12);
1307
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
1308
gtk_container_add (GTK_CONTAINER (dialog_vbox), vbox);
1310
1308
inner_vbox = gtk_vbox_new (FALSE, 6);
1311
gtk_box_pack_start (GTK_BOX (vbox), inner_vbox, TRUE, TRUE, 0);
1309
gtk_box_pack_start (GTK_BOX (dialog_vbox), inner_vbox, TRUE, TRUE, 0);
1313
1311
find_hbox = gtk_hbox_new (FALSE, 6);
1314
1312
gtk_box_pack_start (GTK_BOX (inner_vbox), find_hbox, FALSE, FALSE, 0);
1391
1389
gtk_container_add (GTK_CONTAINER (sw), dialog->tree_view);
1393
gtk_widget_show_all (vbox);
1391
gtk_widget_show_all (dialog_vbox);
1395
1393
panel_toplevel_push_autohide_disabler (dialog->panel_widget->toplevel);
1396
1394
panel_widget_register_open_dialog (panel_widget,
1397
1395
dialog->addto_dialog);
1399
panel_addto_name_change (dialog,
1400
panel_toplevel_get_name (dialog->panel_widget->toplevel));
1397
panel_addto_name_change (dialog);
1434
1431
panel_addto_present_applets (dialog);
1437
dialog->insertion_position = pd ? pd->insertion_pos : -1;
1434
dialog->insert_pack_type = pd ? pd->insert_pack_type : PANEL_OBJECT_PACK_START;
1438
1435
gtk_window_set_screen (GTK_WINDOW (dialog->addto_dialog), screen);
1439
1436
gtk_window_set_default_size (GTK_WINDOW (dialog->addto_dialog),
1440
1437
height * 8 / 7, height);