4061
4061
+#endif /* PANEL_ADDTO_CANVAS_H */
4062
diff -Nur gnome-panel-2.19.2/gnome-panel/panel-addto.c.orig gnome-panel-2.19.2.new/gnome-panel/panel-addto.c.orig
4063
--- gnome-panel-2.19.2/gnome-panel/panel-addto.c.orig 1970-01-01 01:00:00.000000000 +0100
4064
+++ gnome-panel-2.19.2.new/gnome-panel/panel-addto.c.orig 2007-05-15 12:42:45.000000000 +0200
4069
+ * Copyright (C) 2004 Vincent Untz
4071
+ * This program is free software; you can redistribute it and/or
4072
+ * modify it under the terms of the GNU General Public License as
4073
+ * published by the Free Software Foundation; either version 2 of the
4074
+ * License, or (at your option) any later version.
4076
+ * This program is distributed in the hope that it will be useful, but
4077
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
4078
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4079
+ * General Public License for more details.
4081
+ * You should have received a copy of the GNU General Public License
4082
+ * along with this program; if not, write to the Free Software
4083
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
4084
+ * 02111-1307, USA.
4087
+ * Vincent Untz <vincent@vuntz.net>
4090
+#include <config.h>
4091
+#include <string.h>
4093
+#include <gmenu-tree.h>
4095
+#include <libbonobo.h>
4096
+#include <libgnomecanvas/libgnomecanvas.h>
4098
+#include "panel-addto.h"
4099
+#include "panel-addto-canvas.h"
4101
+#define PANEL_ADDTO_CANVAS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_ADDTO_TYPE_CANVAS, PanelAddtoCanvasPrivate))
4103
+static GQuark panel_addto_dialog_quark = 0;
4105
+typedef struct EntryInfo {
4106
+ PanelAddtoCanvas *canvas;
4108
+ GnomeCanvasGroup *group;
4109
+ GnomeCanvasItem *text;
4110
+ GnomeCanvasItem *pixbuf;
4111
+ GnomeCanvasItem *highlight_pixbuf;
4112
+ GnomeCanvasItem *cover;
4113
+ GnomeCanvasItem *selection;
4115
+ double icon_height;
4116
+ double icon_width;
4117
+ double text_height;
4118
+ guint launching : 1;
4119
+ guint selected : 1;
4120
+ guint highlighted : 1;
4127
+ typedef struct CategoryInfo {
4128
+ GnomeCanvasGroup *group;
4129
+ GnomeCanvasItem *title;
4130
+ GnomeCanvasItem *line;
4133
+static PanelAddtoItemInfo internal_addto_items [] = {
4135
+ { PANEL_ADDTO_MENU,
4136
+ PANEL_ACTION_NONE,
4140
+ N_("The main GNOME menu"),
4141
+ PANEL_MAIN_MENU_ICON,
4148
+ { PANEL_ADDTO_MENUBAR,
4149
+ PANEL_ACTION_NONE,
4153
+ N_("A custom menu bar"),
4154
+ PANEL_GNOME_LOGO_ICON,
4161
+ { PANEL_ADDTO_SEPARATOR,
4162
+ PANEL_ACTION_NONE,
4166
+ N_("A separator to organize the panel items"),
4167
+ PANEL_SEPARATOR_ICON,
4174
+ { PANEL_ADDTO_DRAWER,
4175
+ PANEL_ACTION_NONE,
4176
+ N_("Desktop & Windows"),
4177
+ "Desktop & Windows",
4179
+ N_("A pop out drawer to store other items in"),
4180
+ PANEL_DRAWER_ICON,
4188
+static const char applet_requirements [] =
4189
+ "has_all (repo_ids, ['IDL:Bonobo/Control:1.0',"
4190
+ " 'IDL:GNOME/Vertigo/PanelAppletShell:1.0']) && "
4191
+ "defined (panel:icon)";
4193
+static char *applet_sort_criteria [] = {
4207
+ PANEL_ADDTO_RESPONSE_BACK,
4208
+ PANEL_ADDTO_RESPONSE_ADD
4211
+static void panel_addto_present_applications (PanelAddtoDialog *dialog);
4212
+static void panel_addto_present_applets (PanelAddtoDialog *dialog);
4213
+static void panel_addto_init_categories (PanelAddtoDialog *dialog);
4216
+panel_addto_applet_info_sort_func (PanelAddtoItemInfo *a,
4217
+ PanelAddtoItemInfo *b)
4219
+ return g_utf8_collate (a->name, b->name);
4223
+panel_addto_prepend_internal_applets (GSList *list)
4225
+ static gboolean translated = FALSE;
4228
+ for (i = 0; i < G_N_ELEMENTS (internal_addto_items); i++) {
4229
+ if (!translated) {
4230
+ internal_addto_items [i].name = _(internal_addto_items [i].name);
4231
+ internal_addto_items [i].description = _(internal_addto_items [i].description);
4232
+ internal_addto_items [i].category = _(internal_addto_items [i].category);
4235
+ list = g_slist_prepend (list, &internal_addto_items [i]);
4238
+ translated = TRUE;
4240
+ for (i = PANEL_ACTION_LOCK; i < PANEL_ACTION_LAST; i++) {
4241
+ PanelAddtoItemInfo *info;
4243
+ if (panel_action_get_is_disabled (i))
4246
+ info = g_new0 (PanelAddtoItemInfo, 1);
4247
+ info->type = PANEL_ADDTO_ACTION;
4248
+ info->action_type = i;
4249
+ info->name = g_strdup (panel_action_get_text (i));
4250
+ info->description = g_strdup (panel_action_get_tooltip (i));
4251
+ info->category = g_strdup (panel_action_get_category (i));
4252
+ info->english_category = g_strdup (panel_action_get_english_category (i));
4253
+ info->icon = g_strdup (panel_action_get_icon_name (i));
4254
+ info->iid = g_strdup (panel_action_get_drag_id (i));
4255
+ info->static_data = FALSE;
4257
+ list = g_slist_prepend (list, info);
4264
+panel_addto_make_text (const char *name,
4267
+ const char *real_name;
4270
+ real_name = name ? name : _("(empty)");
4272
+ if (!string_empty (desc)) {
4273
+ result = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>\n%s",
4276
+ result = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>",
4283
+#define ICON_SIZE 32
4284
+#define LAUNCHER_ICON_SIZE 20
4287
+panel_addto_make_pixbuf (const char *filename)
4289
+ //FIXME: size shouldn't be fixed but should depend on the font size
4290
+ return panel_load_icon (gtk_icon_theme_get_default (),
4292
+ ICON_SIZE, ICON_SIZE, ICON_SIZE,
4297
+panel_addto_make_pixbuf_for_launcher (const char *filename)
4299
+ //FIXME: size shouldn't be fixed but should depend on the font size
4300
+ return panel_load_icon (gtk_icon_theme_get_default (),
4302
+ LAUNCHER_ICON_SIZE, LAUNCHER_ICON_SIZE, LAUNCHER_ICON_SIZE,
4307
+panel_addto_applications_drag_data_get_cb (GtkWidget *widget,
4308
+ GdkDragContext *context,
4309
+ GtkSelectionData *selection_data,
4312
+ const char *string)
4314
+ gtk_selection_data_set (selection_data,
4315
+ selection_data->target, 8, (guchar *) string,
4320
+panel_addto_applications_drag_begin_cb (GtkWidget *widget,
4321
+ GdkDragContext *context,
4324
+ GtkTreeModel *model;
4325
+ GtkTreePath *path;
4327
+ GdkPixbuf *pixbuf;
4329
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
4331
+ gtk_tree_view_get_cursor (GTK_TREE_VIEW (widget), &path, NULL);
4332
+ gtk_tree_model_get_iter (model, &iter, path);
4333
+ gtk_tree_path_free (path);
4335
+ gtk_tree_model_get (model, &iter,
4336
+ COLUMN_ICON, &pixbuf,
4339
+ gtk_drag_set_icon_pixbuf (context, pixbuf, 0, 0);
4340
+ g_object_unref (pixbuf);
4344
+panel_addto_applications_setup_drag (GtkTreeView *tree_view,
4345
+ const GtkTargetEntry *target,
4348
+ if (!text || panel_lockdown_get_locked_down ())
4351
+ gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (tree_view),
4352
+ GDK_BUTTON1_MASK|GDK_BUTTON2_MASK,
4353
+ target, 1, GDK_ACTION_COPY);
4355
+ g_signal_connect_data (G_OBJECT (tree_view), "drag_data_get",
4356
+ G_CALLBACK (panel_addto_applications_drag_data_get_cb),
4358
+ (GClosureNotify) g_free,
4359
+ 0 /* connect_flags */);
4360
+ g_signal_connect_after (G_OBJECT (tree_view), "drag-begin",
4361
+ G_CALLBACK (panel_addto_applications_drag_begin_cb),
4366
+panel_addto_applications_setup_launcher_drag (GtkTreeView *tree_view,
4369
+ static GtkTargetEntry target[] = {
4370
+ { "text/uri-list", 0, 0 }
4374
+ uri_list = g_strconcat (uri, "\r\n", NULL);
4375
+ panel_addto_applications_setup_drag (tree_view, target, uri_list);
4376
+ g_free (uri_list);
4380
+panel_addto_applications_setup_internal_applet_drag (GtkTreeView *tree_view,
4381
+ const char *applet_type)
4383
+ static GtkTargetEntry target[] = {
4384
+ { "application/x-panel-applet-internal", 0, 0 }
4387
+ panel_addto_applications_setup_drag (tree_view, target, applet_type);
4391
+panel_addto_query_applets (GSList *list)
4393
+ Bonobo_ServerInfoList *applet_list;
4394
+ CORBA_Environment env;
4395
+ const char * const *langs;
4396
+ GSList *langs_gslist;
4399
+ CORBA_exception_init (&env);
4401
+ applet_list = bonobo_activation_query (applet_requirements,
4402
+ applet_sort_criteria,
4404
+ if (BONOBO_EX (&env)) {
4405
+ g_warning (_("query returned exception %s\n"),
4406
+ BONOBO_EX_REPOID (&env));
4408
+ CORBA_exception_free (&env);
4409
+ CORBA_free (applet_list);
4414
+ CORBA_exception_free (&env);
4416
+ langs = g_get_language_names ();
4418
+ langs_gslist = NULL;
4419
+ for (i = 0; langs[i]; i++)
4420
+ langs_gslist = g_slist_prepend (langs_gslist, (char *) langs[i]);
4422
+ langs_gslist = g_slist_reverse (langs_gslist);
4424
+ for (i = 0; i < applet_list->_length; i++) {
4425
+ Bonobo_ServerInfo *info;
4426
+ const char *name, *description, *category, *english_category, *icon;
4427
+ PanelAddtoItemInfo *applet;
4429
+ info = &applet_list->_buffer[i];
4431
+ name = bonobo_server_info_prop_lookup (info,
4434
+ description = bonobo_server_info_prop_lookup (info,
4437
+ category = bonobo_server_info_prop_lookup (info,
4440
+ english_category = bonobo_server_info_prop_lookup (info,
4443
+ icon = bonobo_server_info_prop_lookup (info,
4448
+ panel_lockdown_is_applet_disabled (info->iid)) {
4452
+ applet = g_new0 (PanelAddtoItemInfo, 1);
4453
+ applet->type = PANEL_ADDTO_APPLET;
4454
+ applet->name = g_strdup (name);
4455
+ applet->description = g_strdup (description);
4456
+ applet->icon = g_strdup (icon);
4457
+ applet->iid = g_strdup (info->iid);
4458
+ applet->static_data = FALSE;
4460
+ applet->category = g_strdup_printf (_("Miscellaneous"));
4461
+ applet->english_category = g_strdup_printf ("Miscellaneous");
4463
+ applet->category = g_markup_escape_text (category, -1);
4464
+ applet->english_category = g_markup_escape_text (english_category, -1);
4466
+ list = g_slist_prepend (list, applet);
4469
+ g_slist_free (langs_gslist);
4470
+ CORBA_free (applet_list);
4476
+panel_addto_append_item (PanelAddtoDialog *dialog,
4477
+ GtkListStore *model,
4478
+ PanelAddtoItemInfo *applet)
4481
+ GdkPixbuf *pixbuf;
4484
+ if (applet == NULL) {
4485
+ gtk_list_store_append (model, &iter);
4486
+ gtk_list_store_set (model, &iter,
4487
+ COLUMN_ICON, NULL,
4488
+ COLUMN_TEXT, NULL,
4489
+ COLUMN_DATA, NULL,
4490
+ COLUMN_SEARCH, NULL,
4495
+ if (applet->icon != NULL) {
4496
+ pixbuf = panel_addto_make_pixbuf (applet->icon);
4499
+ gtk_list_store_append (model, &iter);
4501
+ text = panel_addto_make_text (applet->name,
4502
+ applet->description);
4504
+ gtk_list_store_set (model, &iter,
4505
+ COLUMN_ICON, pixbuf,
4506
+ COLUMN_TEXT, text,
4507
+ COLUMN_DATA, applet,
4508
+ COLUMN_SEARCH, applet->name,
4512
+ g_object_unref (pixbuf);
4518
+static GtkTreeModel *
4519
+panel_addto_make_applet_model (PanelAddtoDialog *dialog)
4521
+ GtkListStore *model;
4524
+ if (panel_profile_id_lists_are_writable ()) {
4525
+ dialog->applet_list = panel_addto_query_applets (dialog->applet_list);
4526
+ dialog->applet_list = panel_addto_prepend_internal_applets (dialog->applet_list);
4529
+ dialog->applet_list = g_slist_sort (dialog->applet_list,
4530
+ (GCompareFunc) panel_addto_applet_info_sort_func);
4532
+ model = gtk_list_store_new (NUMBER_COLUMNS,
4538
+ if (panel_profile_id_lists_are_writable () && dialog->applet_list) {
4539
+ panel_addto_append_item (dialog, model, NULL);
4542
+ for (l = dialog->applet_list; l; l = l->next)
4543
+ panel_addto_append_item (dialog, model, l->data);
4545
+ return (GtkTreeModel *) model;
4548
+static void panel_addto_make_application_list (GSList **parent_list,
4549
+ GMenuTreeDirectory *directory,
4550
+ const char *filename);
4553
+panel_addto_prepend_directory (GSList **parent_list,
4554
+ GMenuTreeDirectory *directory,
4555
+ const char *filename)
4557
+ PanelAddtoAppList *data;
4559
+ data = g_new0 (PanelAddtoAppList, 1);
4561
+ data->item_info.type = PANEL_ADDTO_MENU;
4562
+ data->item_info.name = g_strdup (gmenu_tree_directory_get_name (directory));
4563
+ data->item_info.description = g_strdup (gmenu_tree_directory_get_comment (directory));
4564
+ data->item_info.icon = g_strdup (gmenu_tree_directory_get_icon (directory));
4565
+ data->item_info.menu_filename = g_strdup (filename);
4566
+ data->item_info.menu_path = gmenu_tree_directory_make_path (directory, NULL);
4567
+ data->item_info.static_data = FALSE;
4569
+ /* We should set the iid here to something and do
4570
+ * iid = g_strdup_printf ("MENU:%s", tfr->name)
4571
+ * but this means we'd have to free the iid later
4572
+ * and this would complexify too much the free
4574
+ * So the iid is built when we select the row.
4577
+ *parent_list = g_slist_prepend (*parent_list, data);
4579
+ panel_addto_make_application_list (&data->children, directory, filename);
4583
+panel_addto_prepend_entry (GSList **parent_list,
4584
+ GMenuTreeEntry *entry,
4585
+ const char *filename)
4587
+ PanelAddtoAppList *data;
4589
+ data = g_new0 (PanelAddtoAppList, 1);
4591
+ data->item_info.type = PANEL_ADDTO_LAUNCHER;
4592
+ data->item_info.name = g_strdup (gmenu_tree_entry_get_name (entry));
4593
+ data->item_info.description = g_strdup (gmenu_tree_entry_get_comment (entry));
4594
+ data->item_info.icon = g_strdup (gmenu_tree_entry_get_icon (entry));
4595
+ data->item_info.launcher_path = g_strdup (gmenu_tree_entry_get_desktop_file_path (entry));
4596
+ data->item_info.static_data = FALSE;
4598
+ *parent_list = g_slist_prepend (*parent_list, data);
4602
+panel_addto_prepend_alias (GSList **parent_list,
4603
+ GMenuTreeAlias *alias,
4604
+ const char *filename)
4606
+ GMenuTreeItem *aliased_item;
4608
+ aliased_item = gmenu_tree_alias_get_item (alias);
4610
+ switch (gmenu_tree_item_get_type (aliased_item)) {
4611
+ case GMENU_TREE_ITEM_DIRECTORY:
4612
+ panel_addto_prepend_directory (parent_list,
4613
+ GMENU_TREE_DIRECTORY (aliased_item),
4617
+ case GMENU_TREE_ITEM_ENTRY:
4618
+ panel_addto_prepend_entry (parent_list,
4619
+ GMENU_TREE_ENTRY (aliased_item),
4627
+ gmenu_tree_item_unref (aliased_item);
4631
+panel_addto_make_application_list (GSList **parent_list,
4632
+ GMenuTreeDirectory *directory,
4633
+ const char *filename)
4638
+ items = gmenu_tree_directory_get_contents (directory);
4640
+ for (l = items; l; l = l->next) {
4641
+ switch (gmenu_tree_item_get_type (l->data)) {
4642
+ case GMENU_TREE_ITEM_DIRECTORY:
4643
+ panel_addto_prepend_directory (parent_list, l->data, filename);
4646
+ case GMENU_TREE_ITEM_ENTRY:
4647
+ panel_addto_prepend_entry (parent_list, l->data, filename);
4650
+ case GMENU_TREE_ITEM_ALIAS:
4651
+ panel_addto_prepend_alias (parent_list, l->data, filename);
4658
+ gmenu_tree_item_unref (l->data);
4661
+ g_slist_free (items);
4663
+ *parent_list = g_slist_reverse (*parent_list);
4667
+panel_addto_populate_application_model (GtkTreeStore *store,
4668
+ GtkTreeIter *parent,
4671
+ PanelAddtoAppList *data;
4674
+ GdkPixbuf *pixbuf;
4677
+ for (app = app_list; app != NULL; app = app->next) {
4679
+ gtk_tree_store_append (store, &iter, parent);
4681
+ text = panel_addto_make_text (data->item_info.name,
4682
+ data->item_info.description);
4683
+ pixbuf = panel_addto_make_pixbuf (data->item_info.icon);
4684
+ gtk_tree_store_set (store, &iter,
4685
+ COLUMN_ICON, pixbuf,
4686
+ COLUMN_TEXT, text,
4687
+ COLUMN_DATA, &(data->item_info),
4688
+ COLUMN_SEARCH, data->item_info.name,
4692
+ g_object_unref (pixbuf);
4696
+ if (data->children != NULL)
4697
+ panel_addto_populate_application_model (store,
4703
+static GtkTreeModel *
4704
+panel_addto_make_application_model (PanelAddtoDialog *dialog)
4706
+ GtkTreeStore *store;
4708
+ GMenuTreeDirectory *root;
4710
+ store = gtk_tree_store_new (NUMBER_COLUMNS,
4716
+ tree = gmenu_tree_lookup ("applications.menu", GMENU_TREE_FLAGS_NONE);
4718
+ if ((root = gmenu_tree_get_root_directory (tree))) {
4719
+ panel_addto_make_application_list (&dialog->application_list,
4720
+ root, "applications.menu");
4721
+ panel_addto_populate_application_model (store, NULL, dialog->application_list);
4723
+ gmenu_tree_item_unref (root);
4726
+ gmenu_tree_unref (tree);
4728
+ tree = gmenu_tree_lookup ("settings.menu", GMENU_TREE_FLAGS_NONE);
4730
+ if ((root = gmenu_tree_get_root_directory (tree))) {
4733
+ gtk_tree_store_append (store, &iter, NULL);
4734
+ gtk_tree_store_set (store, &iter,
4735
+ COLUMN_ICON, NULL,
4736
+ COLUMN_TEXT, NULL,
4737
+ COLUMN_DATA, NULL,
4738
+ COLUMN_SEARCH, NULL,
4741
+ panel_addto_make_application_list (&dialog->settings_list,
4742
+ root, "settings.menu");
4743
+ panel_addto_populate_application_model (store, NULL,
4744
+ dialog->settings_list);
4746
+ gmenu_tree_item_unref (root);
4749
+ gmenu_tree_unref (tree);
4751
+ return GTK_TREE_MODEL (store);
4755
+panel_addto_add_item (PanelAddtoDialog *dialog,
4756
+ PanelAddtoItemInfo *item_info)
4760
+ g_assert (item_info != NULL);
4764
+ switch (item_info->type) {
4765
+ case PANEL_ADDTO_APPLET:
4766
+ panel_applet_frame_create (dialog->panel_widget->toplevel,
4767
+ dialog->insertion_position,
4770
+ case PANEL_ADDTO_ACTION:
4771
+ panel_action_button_create (dialog->panel_widget->toplevel,
4772
+ dialog->insertion_position,
4773
+ item_info->action_type);
4775
+ case PANEL_ADDTO_LAUNCHER_MENU:
4776
+ panel_addto_present_applications (dialog);
4779
+ case PANEL_ADDTO_LAUNCHER:
4780
+ panel_launcher_create (dialog->panel_widget->toplevel,
4781
+ dialog->insertion_position,
4782
+ item_info->launcher_path);
4784
+ case PANEL_ADDTO_LAUNCHER_NEW:
4785
+ ask_about_launcher (NULL, dialog->panel_widget,
4786
+ dialog->insertion_position, FALSE);
4788
+ case PANEL_ADDTO_MENU:
4789
+ panel_menu_button_create (dialog->panel_widget->toplevel,
4790
+ dialog->insertion_position,
4791
+ item_info->menu_filename,
4792
+ item_info->menu_path,
4793
+ item_info->menu_path != NULL,
4796
+ case PANEL_ADDTO_MENUBAR:
4797
+ panel_menu_bar_create (dialog->panel_widget->toplevel,
4798
+ dialog->insertion_position);
4800
+ case PANEL_ADDTO_SEPARATOR:
4801
+ panel_separator_create (dialog->panel_widget->toplevel,
4802
+ dialog->insertion_position);
4804
+ case PANEL_ADDTO_DRAWER:
4805
+ panel_drawer_create (dialog->panel_widget->toplevel,
4806
+ dialog->insertion_position,
4807
+ NULL, FALSE, NULL);
4815
+panel_addto_dialog_response (GtkWidget *widget_dialog,
4816
+ guint response_id,
4817
+ PanelAddtoDialog *dialog)
4819
+ PanelAddtoItemInfo *data;
4820
+ PanelAddtoCanvasPrivate *priv;
4821
+ PanelAddtoEntry *selected_applet;
4822
+ GtkTreeSelection *selected_application;
4823
+ GtkTreeModel *model;
4826
+ switch (response_id) {
4827
+ case GTK_RESPONSE_HELP:
4828
+ panel_show_help (gtk_window_get_screen (GTK_WINDOW (dialog->addto_dialog)),
4829
+ "user-guide.xml", "gospanel-15");
4832
+ case PANEL_ADDTO_RESPONSE_ADD:
4834
+ if (dialog->status == APPLETS) {
4835
+ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
4836
+ selected_applet = priv->selected;
4837
+ data = selected_applet->item_info;
4839
+ panel_addto_add_item (dialog, data);
4841
+ } else if (dialog->status == APPLICATIONS) {
4842
+ selected_application = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
4843
+ if (gtk_tree_selection_get_selected (selected_application,
4845
+ gtk_tree_model_get (model, &iter,
4846
+ COLUMN_DATA, &data, -1);
4848
+ if (data != NULL) {
4849
+ panel_addto_add_item (dialog, data);
4857
+ case PANEL_ADDTO_RESPONSE_BACK:
4858
+ /* This response only happens when we're showing the
4859
+ * application list and the user wants to go back to the
4861
+ gtk_widget_hide (dialog->applications_sw);
4862
+ dialog->status = APPLETS;
4863
+ panel_addto_present_applets (dialog);
4864
+ gtk_widget_show_all (dialog->applets_sw);
4865
+ gtk_widget_show (dialog->statuslabel);
4866
+ gtk_widget_show (dialog->search_entry);
4867
+ gtk_widget_show (dialog->search_label);
4868
+ gtk_widget_set_sensitive (dialog->launcher_button, TRUE);
4869
+ if (!panel_lockdown_get_disable_command_line ())
4870
+ gtk_widget_set_sensitive (dialog->custom_launcher_button, TRUE);
4873
+ case GTK_RESPONSE_CLOSE:
4874
+ gtk_widget_destroy (widget_dialog);
4883
+panel_addto_add_launcher (PanelAddtoDialog *dialog)
4885
+ PanelAddtoEntry *launcher_applet;
4886
+ PanelAddtoItemInfo *data;
4888
+ launcher_applet = g_new (PanelAddtoEntry, 1);
4889
+ data = launcher_applet->item_info;
4890
+ data = g_new (PanelAddtoItemInfo, 1);
4891
+ data->type = PANEL_ADDTO_LAUNCHER_MENU;
4893
+ panel_addto_add_item (dialog, data);
4895
+ g_free (launcher_applet);
4900
+panel_addto_add_custom_launcher (PanelAddtoDialog *dialog)
4902
+ PanelAddtoEntry *launcher_applet;
4903
+ PanelAddtoItemInfo *data;
4905
+ launcher_applet = g_new (PanelAddtoEntry, 1);
4906
+ data = launcher_applet->item_info;
4907
+ data = g_new (PanelAddtoItemInfo, 1);
4908
+ data->type = PANEL_ADDTO_LAUNCHER_NEW;
4910
+ panel_addto_add_item (dialog, data);
4912
+ g_free (launcher_applet);
4917
+panel_addto_dialog_destroy (GtkWidget *widget_dialog,
4918
+ PanelAddtoDialog *dialog)
4920
+ panel_toplevel_pop_autohide_disabler (PANEL_TOPLEVEL (dialog->panel_widget->toplevel));
4921
+ g_object_set_qdata (G_OBJECT (dialog->panel_widget->toplevel),
4922
+ panel_addto_dialog_quark,
4927
+static PanelAddtoCategory *
4928
+panel_addto_category_new (const gchar *title,
4929
+ const gchar *english_title,
4930
+ gboolean real_category)
4932
+ PanelAddtoCategory *retval;
4933
+ retval = g_new0 (PanelAddtoCategory, 1);
4935
+ retval->title = g_strdup (title);
4936
+ retval->english_title = g_strdup (english_title);
4937
+ retval->real_category = real_category != FALSE;
4938
+ retval->entries = NULL; /* We will populate it in init_categories */
4944
+compare_categories (PanelAddtoCategory *a,
4945
+ PanelAddtoCategory *b)
4947
+ return g_utf8_collate (a->title, b->title);
4951
+panel_addto_init_categories (PanelAddtoDialog *dialog)
4953
+ PanelAddtoInformation *info;
4954
+ PanelAddtoItemInfo *applet;
4955
+ PanelAddtoEntry *entry;
4956
+ PanelAddtoCategory *current_category;
4957
+ GSList *categories = NULL;
4959
+ gchar *category_title, *category_english_title;
4962
+ info = g_new0 (PanelAddtoInformation, 1);
4964
+ for (l = dialog->applet_list; l; l = l->next) {
4966
+ category_title = g_strdup (applet->category);
4967
+ category_english_title = g_strdup (applet->english_category);
4969
+ for (m = categories; m; m = m->next) {
4970
+ current_category = m->data;
4971
+ if (!g_utf8_collate (current_category->english_title, category_english_title)) {
4973
+ current_category->n_entries++;
4974
+ if (!current_category->translated && strcmp (category_title, category_english_title)) {
4975
+ current_category->title = category_title;
4976
+ current_category->translated = TRUE;
4982
+ categories = g_slist_prepend (categories,
4983
+ panel_addto_category_new (category_title, category_english_title, TRUE));
4984
+ current_category = categories->data;
4985
+ current_category->translated = strcmp (category_title, category_english_title) ? TRUE : FALSE;
4986
+ current_category->n_entries = 1;
4989
+ entry = g_new0 (PanelAddtoEntry, 1);
4990
+ entry->title = g_strdup (applet->name);
4991
+ entry->comment = g_strdup (applet->description);
4992
+ entry->item_info = applet;
4993
+ entry->category = current_category;
4994
+ entry->dialog = dialog;
4995
+ entry->icon_pixbuf = panel_addto_make_pixbuf (applet->icon);
4996
+ current_category->entries = g_slist_append (current_category->entries, entry);
4999
+ categories = g_slist_sort (categories,
5000
+ (GCompareFunc) compare_categories);
5002
+ info->n_categories = g_slist_length (categories);
5003
+ info->categories = categories;
5005
+ dialog->info = info;
5009
+panel_addto_separator_func (GtkTreeModel *model,
5010
+ GtkTreeIter *iter,
5013
+ int column = GPOINTER_TO_INT (data);
5016
+ gtk_tree_model_get (model, iter, column, &text, -1);
5026
+panel_addto_applications_selection_changed (GtkTreeSelection *selection,
5027
+ PanelAddtoDialog *dialog)
5029
+ GtkTreeModel *model;
5031
+ PanelAddtoItemInfo *data;
5035
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
5036
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
5040
+ gtk_tree_model_get (model, &iter, COLUMN_DATA, &data, -1);
5043
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
5047
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), TRUE);
5049
+ gtk_button_set_label (GTK_BUTTON (dialog->add_button),
5051
+ gtk_button_set_use_stock (GTK_BUTTON (dialog->add_button),
5054
+ /* only allow dragging applets if we can add applets */
5056
+ if (panel_profile_id_lists_are_writable ()) {
5057
+ switch (data->type) {
5058
+ case PANEL_ADDTO_LAUNCHER:
5059
+ panel_addto_applications_setup_launcher_drag (GTK_TREE_VIEW (dialog->tree_view),
5060
+ data->launcher_path);
5062
+ case PANEL_ADDTO_MENU:
5064
+ /* build the iid for menus other than the main menu */
5066
+ if (data->iid == NULL) {
5067
+ iid = g_strdup_printf ("MENU:%s/%s",
5068
+ data->menu_filename,
5071
+ iid = g_strdup (data->iid);
5073
+ panel_addto_applications_setup_internal_applet_drag (GTK_TREE_VIEW (dialog->tree_view),
5085
+panel_addto_applications_selection_activated (GtkTreeView *view,
5086
+ GtkTreePath *path,
5087
+ GtkTreeViewColumn *column,
5088
+ PanelAddtoDialog *dialog)
5090
+ gtk_dialog_response (GTK_DIALOG (dialog->addto_dialog),
5091
+ PANEL_ADDTO_RESPONSE_ADD);
5095
+panel_addto_present_applications (PanelAddtoDialog *dialog)
5097
+ GtkTreeSelection *selection;
5098
+ GtkTreeViewColumn *column;
5100
+ if (dialog->application_model == NULL) {
5101
+ dialog->application_model = panel_addto_make_application_model (dialog);
5103
+ gtk_widget_hide (dialog->applets_sw);
5104
+ gtk_widget_hide (dialog->statuslabel);
5105
+ gtk_widget_hide (dialog->search_entry);
5106
+ gtk_widget_hide (dialog->search_label);
5108
+ gtk_widget_set_sensitive (dialog->launcher_button, FALSE);
5109
+ gtk_widget_set_sensitive (dialog->custom_launcher_button, FALSE);
5111
+ dialog->status = APPLICATIONS;
5113
+ dialog->applications_sw = gtk_scrolled_window_new (NULL, NULL);
5114
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dialog->applications_sw),
5115
+ GTK_POLICY_AUTOMATIC,
5116
+ GTK_POLICY_AUTOMATIC);
5117
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (dialog->applications_sw),
5119
+ dialog->tree_view = gtk_tree_view_new ();
5120
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->tree_view),
5122
+ gtk_tree_view_expand_all (GTK_TREE_VIEW (dialog->tree_view));
5124
+ dialog->renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF,
5129
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view),
5132
+ "pixbuf", COLUMN_ICON,
5135
+ dialog->renderer = gtk_cell_renderer_text_new ();
5136
+ g_object_set (dialog->renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
5138
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view),
5141
+ "markup", COLUMN_TEXT,
5143
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (dialog->tree_view),
5146
+ gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (dialog->tree_view),
5147
+ panel_addto_separator_func,
5148
+ GINT_TO_POINTER (COLUMN_TEXT),
5150
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view));
5151
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
5153
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->tree_view),
5155
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
5157
+ g_signal_connect (selection, "changed",
5158
+ G_CALLBACK (panel_addto_applications_selection_changed),
5161
+ g_signal_connect (dialog->tree_view, "row-activated",
5162
+ G_CALLBACK (panel_addto_applications_selection_activated),
5165
+ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->tree_view),
5166
+ dialog->application_model);
5167
+ gtk_container_add (GTK_CONTAINER (dialog->applications_sw),
5168
+ GTK_WIDGET (dialog->tree_view));
5169
+ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox),
5170
+ GTK_WIDGET (dialog->applications_sw), TRUE, TRUE, 0);
5173
+ gtk_window_set_focus (GTK_WINDOW (dialog->addto_dialog),
5174
+ dialog->tree_view);
5175
+ gtk_widget_set_sensitive (dialog->back_button, TRUE);
5176
+ gtk_widget_show_all (GTK_WIDGET (dialog->applications_sw));
5180
+panel_addto_present_applets (PanelAddtoDialog *dialog)
5183
+ if (dialog->applet_model == NULL)
5184
+ dialog->applet_model = panel_addto_make_applet_model (dialog);
5186
+ gtk_widget_set_sensitive (dialog->back_button, FALSE);
5191
+panel_addto_dialog_free_item_info (PanelAddtoItemInfo *item_info)
5193
+ if (item_info == NULL || item_info->static_data)
5196
+ if (item_info->name != NULL)
5197
+ g_free (item_info->name);
5198
+ item_info->name = NULL;
5200
+ if (item_info->description != NULL)
5201
+ g_free (item_info->description);
5202
+ item_info->description = NULL;
5204
+ if (item_info->icon != NULL)
5205
+ g_free (item_info->icon);
5206
+ item_info->icon = NULL;
5208
+ if (item_info->iid != NULL)
5209
+ g_free (item_info->iid);
5210
+ item_info->iid = NULL;
5212
+ if (item_info->launcher_path != NULL)
5213
+ g_free (item_info->launcher_path);
5214
+ item_info->launcher_path = NULL;
5216
+ if (item_info->menu_filename != NULL)
5217
+ g_free (item_info->menu_filename);
5218
+ item_info->menu_filename = NULL;
5220
+ if (item_info->menu_path != NULL)
5221
+ g_free (item_info->menu_path);
5222
+ item_info->menu_path = NULL;
5226
+panel_addto_dialog_free_application_list (GSList *application_list)
5228
+ PanelAddtoAppList *data;
5231
+ if (application_list == NULL)
5234
+ for (app = application_list; app != NULL; app = app->next) {
5236
+ if (data->children) {
5237
+ panel_addto_dialog_free_application_list (data->children);
5239
+ panel_addto_dialog_free_item_info (&data->item_info);
5242
+ g_slist_free (application_list);
5246
+panel_addto_dialog_free (PanelAddtoDialog *dialog)
5248
+ GConfClient *client;
5249
+ GSList *item, *l, *m;
5250
+ PanelAddtoCanvasPrivate *priv;
5251
+ PanelAddtoCategory *current_category;
5253
+ client = panel_gconf_get_client ();
5255
+ if (dialog->name_notify)
5256
+ gconf_client_notify_remove (client, dialog->name_notify);
5257
+ dialog->name_notify = 0;
5259
+ if (dialog->addto_dialog)
5260
+ gtk_widget_destroy (dialog->addto_dialog);
5261
+ dialog->addto_dialog = NULL;
5263
+ if (dialog->label) {
5264
+ dialog->label = NULL;
5267
+ for (item = dialog->applet_list; item != NULL; item = item->next) {
5268
+ PanelAddtoItemInfo *applet;
5270
+ applet = (PanelAddtoItemInfo *) item->data;
5271
+ if (!applet->static_data) {
5272
+ panel_addto_dialog_free_item_info (applet);
5276
+ g_slist_free (dialog->applet_list);
5278
+ panel_addto_dialog_free_application_list (dialog->application_list);
5279
+ panel_addto_dialog_free_application_list (dialog->settings_list);
5281
+ if (dialog->canvas) {
5282
+ priv = PANEL_ADDTO_CANVAS_GET_PRIVATE (dialog->canvas);
5284
+ if (priv && priv->info && priv->info->categories) {
5285
+ for (l = priv->info->categories; l; l = l->next) {
5286
+ current_category = l->data;
5287
+ for (m = current_category->entries; m; m = m->next) {
5290
+ if (current_category->user_data)
5291
+ g_free (current_category->user_data);
5292
+ g_slist_free (current_category->entries);
5293
+ g_free (current_category);
5295
+ g_slist_free (priv->info->categories);
5297
+ g_free (priv->search_text);
5303
+ if (dialog->applet_model)
5304
+ g_object_unref (dialog->applet_model);
5305
+ dialog->applet_model = NULL;
5307
+ if (dialog->application_model)
5308
+ g_object_unref (dialog->application_model);
5309
+ dialog->application_model = NULL;
5311
+ if (dialog->menu_tree)
5312
+ gmenu_tree_unref (dialog->menu_tree);
5313
+ dialog->menu_tree = NULL;
5319
+panel_addto_name_change (PanelAddtoDialog *dialog,
5327
+ if (!string_empty (name))
5328
+ label = g_strdup_printf (_("Select an item to add to \"%s\":"),
5331
+ if (panel_toplevel_get_is_attached (dialog->panel_widget->toplevel)) {
5332
+ title = g_strdup_printf (_("Add to Drawer"));
5333
+ if (label == NULL)
5334
+ label = g_strdup (_("Select an item to add to the drawer:"));
5336
+ title = g_strdup_printf (_("Add to Panel"));
5337
+ if (label == NULL)
5338
+ label = g_strdup (_("Select an item to add to the panel \n\
5339
+(you can also directly drag and drop items onto the panel):"));
5342
+ gtk_window_set_title (GTK_WINDOW (dialog->addto_dialog), title);
5345
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (dialog->label), label);
5350
+panel_addto_name_notify (GConfClient *client,
5352
+ GConfEntry *entry,
5353
+ PanelAddtoDialog *dialog)
5355
+ GConfValue *value;
5357
+ const char *text = NULL;
5359
+ key = panel_gconf_basename (gconf_entry_get_key (entry));
5361
+ if (strcmp (key, "name"))
5364
+ value = gconf_entry_get_value (entry);
5366
+ if (value && value->type == GCONF_VALUE_STRING)
5367
+ text = gconf_value_get_string (value);
5370
+ panel_addto_name_change (dialog, text);
5374
+static PanelAddtoDialog *
5375
+panel_addto_dialog_new (PanelWidget *panel_widget)
5377
+ PanelAddtoDialog *dialog;
5379
+ GtkWidget *top_hbox;
5380
+ GtkWidget *launchers_hbox;
5381
+ GdkPixbuf *launcher_pixbuf;
5382
+ GtkWidget *launcher_image;
5383
+ GtkWidget *bottom_hbox;
5384
+ GtkTooltips *launchers_tooltips;
5385
+ GtkImage *label_image;
5387
+ dialog = g_new0 (PanelAddtoDialog, 1);
5389
+ dialog->status = APPLETS;
5391
+ g_object_set_qdata_full (G_OBJECT (panel_widget->toplevel),
5392
+ panel_addto_dialog_quark,
5394
+ (GDestroyNotify) panel_addto_dialog_free);
5396
+ dialog->panel_widget = panel_widget;
5397
+ dialog->name_notify =
5398
+ panel_profile_toplevel_notify_add (dialog->panel_widget->toplevel,
5400
+ (GConfClientNotifyFunc) panel_addto_name_notify,
5402
+ dialog->addto_dialog = gtk_dialog_new ();
5404
+ dialog->statuslabel = gtk_label_new ("");
5406
+ gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
5407
+ GTK_STOCK_HELP, GTK_RESPONSE_HELP);
5408
+ dialog->back_button = gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
5409
+ GTK_STOCK_GO_BACK,
5410
+ PANEL_ADDTO_RESPONSE_BACK);
5411
+ dialog->add_button = gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
5413
+ PANEL_ADDTO_RESPONSE_ADD);
5414
+ gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog),
5416
+ GTK_RESPONSE_CLOSE);
5417
+ gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE);
5418
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog->addto_dialog),
5420
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog->addto_dialog),
5421
+ PANEL_ADDTO_RESPONSE_ADD);
5423
+ gtk_container_set_border_width (GTK_CONTAINER (dialog->addto_dialog), 5);
5424
+ gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog->addto_dialog)->vbox), 2);
5425
+ g_signal_connect (G_OBJECT (dialog->addto_dialog), "response",
5426
+ G_CALLBACK (panel_addto_dialog_response), dialog);
5427
+ g_signal_connect (dialog->addto_dialog, "destroy",
5428
+ G_CALLBACK (panel_addto_dialog_destroy), dialog);
5430
+ vbox = gtk_vbox_new (FALSE, 12);
5431
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
5432
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog->addto_dialog)->vbox),
5433
+ GTK_WIDGET (vbox));
5435
+ dialog->inner_vbox = gtk_vbox_new (FALSE, 6);
5436
+ gtk_box_pack_start (GTK_BOX (vbox), dialog->inner_vbox, TRUE, TRUE, 0);
5438
+ top_hbox = gtk_hbox_new (FALSE, 6);
5439
+ launchers_hbox = gtk_hbox_new (FALSE, 6);
5440
+ bottom_hbox = gtk_hbox_new (FALSE, 0);
5441
+ dialog->label = gtk_label_new_with_mnemonic ("");
5442
+ gtk_misc_set_alignment (GTK_MISC (dialog->label), 0.0, 0.5);
5443
+ gtk_label_set_use_markup (GTK_LABEL (dialog->label), TRUE);
5445
+ label_image = g_object_new (GTK_TYPE_IMAGE,
5446
+ "stock", GTK_STOCK_DIALOG_INFO,
5447
+ "icon-size", GTK_ICON_SIZE_DND,
5449
+ dialog->search_label = gtk_label_new_with_mnemonic (_("_Search: "));
5450
+ dialog->search_entry = gtk_entry_new ();
5451
+ g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->search_entry)));
5452
+ gtk_label_set_mnemonic_widget (GTK_LABEL (dialog->search_label), GTK_WIDGET (dialog->search_entry));
5454
+ g_signal_connect (G_OBJECT (dialog->search_entry), "changed",
5455
+ G_CALLBACK (panel_addto_relayout_for_search), dialog);
5456
+ g_signal_connect (G_OBJECT (dialog->search_entry), "activate",
5457
+ G_CALLBACK (panel_addto_activate_from_searchbar), dialog);
5459
+ gtk_box_pack_start (GTK_BOX (top_hbox), GTK_WIDGET(label_image),
5462
+ gtk_box_pack_start (GTK_BOX (top_hbox), dialog->label,
5465
+ gtk_box_pack_start (GTK_BOX (top_hbox), GTK_WIDGET (dialog->search_label),
5468
+ gtk_box_pack_start (GTK_BOX (top_hbox), GTK_WIDGET (dialog->search_entry),
5471
+ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), top_hbox,
5474
+ /* Launcher button */
5475
+ launchers_tooltips = gtk_tooltips_new ();
5476
+ dialog->launcher_button = gtk_button_new_with_mnemonic (_("A_pplication Launcher..."));
5477
+ launcher_pixbuf = panel_addto_make_pixbuf_for_launcher ("launcher-program");
5478
+ launcher_image = gtk_image_new_from_pixbuf (launcher_pixbuf);
5479
+ gtk_button_set_image (GTK_BUTTON (dialog->launcher_button), launcher_image);
5480
+ gtk_tooltips_set_tip (launchers_tooltips, dialog->launcher_button, _("Launch a program that is already in the GNOME menu"), NULL);
5481
+ g_signal_connect_swapped (dialog->launcher_button, "clicked",
5482
+ G_CALLBACK (panel_addto_add_launcher), dialog);
5483
+ gtk_box_pack_start (GTK_BOX (launchers_hbox), dialog->launcher_button,
5486
+ /* Custom launcher button*/
5487
+ dialog->custom_launcher_button = gtk_button_new_with_mnemonic (_("Custom Application _Launcher"));
5488
+ launcher_image = gtk_image_new_from_pixbuf (launcher_pixbuf);
5489
+ gtk_button_set_image (GTK_BUTTON (dialog->custom_launcher_button), launcher_image);
5490
+ gtk_tooltips_set_tip (launchers_tooltips, dialog->custom_launcher_button, _("Create a new launcher"), NULL);
5491
+ g_signal_connect_swapped (dialog->custom_launcher_button, "clicked",
5492
+ G_CALLBACK (panel_addto_add_custom_launcher), dialog);
5493
+ gtk_box_pack_start (GTK_BOX (launchers_hbox), dialog->custom_launcher_button,
5496
+ if (panel_lockdown_get_disable_command_line ())
5497
+ gtk_widget_set_sensitive (dialog->custom_launcher_button, FALSE);
5499
+ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), launchers_hbox,
5502
+ dialog->applets_sw = gtk_scrolled_window_new (NULL, NULL);
5503
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (dialog->applets_sw),
5504
+ GTK_POLICY_AUTOMATIC,
5505
+ GTK_POLICY_AUTOMATIC);
5506
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (dialog->applets_sw),
5509
+ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), dialog->applets_sw, TRUE, TRUE, 0);
5510
+ gtk_box_pack_start (GTK_BOX (bottom_hbox), dialog->statuslabel, FALSE, FALSE, 0);
5512
+ gtk_box_pack_start (GTK_BOX (dialog->inner_vbox), bottom_hbox,
5515
+ gtk_widget_show_all (vbox);
5517
+ gtk_label_set_mnemonic_widget (GTK_LABEL (dialog->label),
5520
+ panel_toplevel_push_autohide_disabler (dialog->panel_widget->toplevel);
5521
+ panel_widget_register_open_dialog (panel_widget,
5522
+ dialog->addto_dialog);
5523
+ panel_addto_name_change (dialog,
5524
+ panel_toplevel_get_name (dialog->panel_widget->toplevel));
5529
+#define MAX_ADDTOPANEL_HEIGHT 540
5532
+panel_addto_present (GtkMenuItem *item,
5533
+ PanelWidget *panel_widget)
5535
+ PanelAddtoDialog *dialog;
5536
+ PanelToplevel *toplevel;
5538
+ GtkAdjustment *sw_adjustment = NULL;
5539
+ GdkScreen *screen;
5540
+ gint screen_height;
5543
+ toplevel = panel_widget->toplevel;
5544
+ pd = g_object_get_data (G_OBJECT (toplevel), "PanelData");
5546
+ if (!panel_addto_dialog_quark)
5547
+ panel_addto_dialog_quark =
5548
+ g_quark_from_static_string ("panel-addto-dialog");
5550
+ dialog = g_object_get_qdata (G_OBJECT (toplevel),
5551
+ panel_addto_dialog_quark);
5553
+ screen = gtk_window_get_screen (GTK_WINDOW (toplevel));
5554
+ screen_height = gdk_screen_get_height (screen);
5555
+ height = MIN (MAX_ADDTOPANEL_HEIGHT, 3 * (screen_height / 4));
5558
+ dialog = panel_addto_dialog_new (panel_widget);
5560
+ panel_addto_present_applets (dialog);
5561
+ panel_addto_init_categories (dialog);
5563
+ dialog->canvas = panel_addto_canvas_new (dialog->info);
5564
+ gtk_container_add (GTK_CONTAINER (dialog->applets_sw),
5565
+ GTK_WIDGET (dialog->canvas));
5568
+ sw_adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (dialog->applets_sw));
5569
+ dialog->insertion_position = pd ? pd->insertion_pos : -1;
5570
+ gtk_window_set_screen (GTK_WINDOW (dialog->addto_dialog), screen);
5571
+ gtk_window_set_default_size (GTK_WINDOW (dialog->addto_dialog),
5572
+ height * 1.35, height);
5573
+ gtk_window_present (GTK_WINDOW (dialog->addto_dialog));
5575
+ sw_adjustment->value = sw_adjustment->lower;
5576
+ sw_adjustment->step_increment = 55;
5577
+ gtk_adjustment_clamp_page (sw_adjustment, sw_adjustment->lower, sw_adjustment->upper);
5578
+ gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (dialog->applets_sw), sw_adjustment);
5580
diff -Nur gnome-panel-2.19.2/gnome-panel/panel-addto-event-box.c gnome-panel-2.19.2.new/gnome-panel/panel-addto-event-box.c
5581
--- gnome-panel-2.19.2/gnome-panel/panel-addto-event-box.c 1970-01-01 01:00:00.000000000 +0100
5582
+++ gnome-panel-2.19.2.new/gnome-panel/panel-addto-event-box.c 2007-05-15 12:42:45.000000000 +0200
4062
diff -Nur gnome-panel-2.20.0.1/gnome-panel/panel-addto-event-box.c gnome-panel-2.20.0.1.new/gnome-panel/panel-addto-event-box.c
4063
--- gnome-panel-2.20.0.1/gnome-panel/panel-addto-event-box.c 1970-01-01 01:00:00.000000000 +0100
4064
+++ gnome-panel-2.20.0.1.new/gnome-panel/panel-addto-event-box.c 2007-09-25 15:39:38.000000000 +0200
5583
4065
@@ -0,0 +1,99 @@
5584
4066
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */