18
18
#include <glib/gi18n.h>
19
19
#include <gio/gio.h>
20
20
#include <gdk/gdkkeysyms.h>
22
23
#include <libpanel-util/panel-glib.h>
26
27
#include "applet.h"
28
28
#include "button-widget.h"
29
29
#include "launcher.h"
30
#include "panel-bindings.h"
30
31
#include "panel-context-menu.h"
31
32
#include "panel-util.h"
32
#include "panel-config-global.h"
33
#include "panel-gconf.h"
34
#include "panel-profile.h"
35
33
#include "panel-applet-frame.h"
36
34
#include "panel-action-button.h"
37
35
#include "panel-menu-bar.h"
38
36
#include "panel-separator.h"
39
#include "panel-compatibility.h"
40
37
#include "panel-multiscreen.h"
41
38
#include "panel-toplevel.h"
42
39
#include "panel-menu-button.h"
43
40
#include "panel-globals.h"
44
41
#include "panel-lockdown.h"
45
42
#include "panel-icon-names.h"
43
#include "panel-layout.h"
44
#include "panel-schemas.h"
45
#include "panel-user-menu.h"
78
78
button_widget_set_orientation (BUTTON_WIDGET (info->widget), orientation);
80
80
case PANEL_OBJECT_MENU_BAR:
81
panel_menu_bar_set_orientation (PANEL_MENU_BAR (info->widget), orientation);
83
case PANEL_OBJECT_DRAWER: {
84
Drawer *drawer = info->data;
85
PanelWidget *panel_widget;
87
panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel);
89
button_widget_set_orientation (BUTTON_WIDGET (info->widget), orientation);
91
gtk_widget_queue_resize (GTK_WIDGET (drawer->toplevel));
92
gtk_container_foreach (GTK_CONTAINER (panel_widget),
93
orient_change_foreach,
81
case PANEL_OBJECT_USER_MENU:
82
panel_menu_bar_object_set_orientation (PANEL_MENU_BAR_OBJECT (info->widget), orientation);
97
84
case PANEL_OBJECT_SEPARATOR:
98
85
panel_separator_set_orientation (PANEL_SEPARATOR (info->widget),
206
194
back_change(info,PANEL_WIDGET(widget));
210
panel_applet_removed(GtkWidget *widget, GtkWidget *applet, gpointer data)
212
PanelToplevel *toplevel;
215
toplevel = PANEL_WIDGET (widget)->toplevel;
216
info = g_object_get_data (G_OBJECT (applet), "applet_info");
218
if (info->type == PANEL_OBJECT_DRAWER) {
219
Drawer *drawer = info->data;
221
if (drawer->toplevel)
222
panel_toplevel_queue_auto_hide (toplevel);
227
198
deactivate_idle (gpointer data)
229
200
PanelData *pd = data;
230
201
pd->deactivate_idle = 0;
232
pd->insertion_pos = -1;
203
pd->insert_pack_type = PANEL_OBJECT_PACK_START;
298
258
panel_applet_save_position (info, info->id, FALSE);
262
panel_menu_lockdown_changed (PanelLockdown *lockdown,
265
PanelData *pd = user_data;
268
if (gtk_widget_get_visible (pd->menu))
269
gtk_menu_shell_deactivate (GTK_MENU_SHELL (pd->menu));
271
g_signal_handlers_disconnect_by_func (pd->menu,
272
context_menu_deactivate,
275
g_object_unref (pd->menu);
301
280
static GtkWidget *
302
281
panel_menu_get (PanelWidget *panel, PanelData *pd)
305
pd->menu = g_object_ref_sink (panel_context_menu_create (panel));
306
g_signal_connect (pd->menu, "deactivate",
307
G_CALLBACK (context_menu_deactivate),
309
g_signal_connect (pd->menu, "show",
310
G_CALLBACK (context_menu_show), pd);
284
pd->menu = panel_context_menu_create (panel);
285
if (pd->menu != NULL) {
286
g_object_ref_sink (pd->menu);
287
g_signal_connect (pd->menu, "deactivate",
288
G_CALLBACK (context_menu_deactivate),
290
g_signal_connect (pd->menu, "show",
291
G_CALLBACK (context_menu_show), pd);
293
panel_lockdown_on_notify (panel_lockdown_get (),
296
panel_menu_lockdown_changed,
369
panel_popup_menu_signal (PanelToplevel *toplevel)
371
return panel_popup_menu (toplevel, 3, GDK_CURRENT_TIME);
375
358
panel_button_press_event (PanelToplevel *toplevel,
376
359
GdkEventButton *event)
378
363
if (event->button != 3)
381
return panel_popup_menu (toplevel, event->button, event->time);
366
modifiers = event->state & gtk_accelerator_get_default_mod_mask ();
368
if (modifiers == panel_bindings_get_mouse_button_modifier_keymask ())
369
return panel_popup_menu (toplevel, event->button, event->time);
385
panel_key_press_event (GtkWidget *widget,
375
panel_key_press_event (PanelToplevel *toplevel,
389
* If the focus widget is a GtkSocket, i.e. the
390
* focus is in an applet in another process, then key
391
* bindings do not work. We get around this by
392
* activating the key bindings here.
394
if (GTK_IS_SOCKET (gtk_window_get_focus (GTK_WINDOW (widget))) &&
395
event->keyval == GDK_F10 &&
396
(event->state & gtk_accelerator_get_default_mod_mask ()) == GDK_CONTROL_MASK)
397
return gtk_bindings_activate (GTK_OBJECT (widget),
378
gboolean is_popup = FALSE;
380
/* We're not connecting to the popup-menu signal since we want to be
381
* able to handle keybinding of popup-menu + modifier from metacity */
383
panel_util_key_event_is_popup (event, NULL, &is_popup);
385
panel_util_key_event_is_popup_panel (event, &is_popup, NULL);
388
return panel_popup_menu (toplevel, 3, event->time);
394
get_settings_background_for_toplevel (PanelToplevel *toplevel)
396
char *toplevel_settings_path;
398
GSettings *settings_background;
400
g_object_get (toplevel, "settings-path", &toplevel_settings_path, NULL);
401
settings = g_settings_new_with_path (PANEL_TOPLEVEL_SCHEMA,
402
toplevel_settings_path);
403
settings_background = g_settings_get_child (settings,
404
PANEL_BACKGROUND_SCHEMA_CHILD);
406
g_object_unref (settings);
407
g_free (toplevel_settings_path);
409
return settings_background;
405
413
set_background_image_from_uri (PanelToplevel *toplevel,
410
if ( ! panel_profile_is_writable_background_type (toplevel) ||
411
! panel_profile_is_writable_background_image (toplevel))
414
if (!(image = g_filename_from_uri (uri, NULL, NULL)))
417
panel_profile_set_background_image (toplevel, image);
418
panel_profile_set_background_type (toplevel, PANEL_BACK_IMAGE);
419
file = g_file_new_for_uri (uri);
420
if (!g_file_is_native (file)) {
421
g_object_unref (file);
424
g_object_unref (file);
426
settings = get_settings_background_for_toplevel (toplevel);
428
if (!g_settings_is_writable (settings,
429
PANEL_BACKGROUND_TYPE_KEY) ||
430
!g_settings_is_writable (settings,
431
PANEL_BACKGROUND_IMAGE_URI_KEY)) {
432
g_object_unref (settings);
436
g_settings_set_string (settings, PANEL_BACKGROUND_IMAGE_URI_KEY, uri);
437
g_settings_set_enum (settings, PANEL_BACKGROUND_TYPE_KEY, PANEL_BACK_IMAGE);
439
g_object_unref (settings);
426
445
set_background_color (PanelToplevel *toplevel,
427
446
guint16 *dropped)
434
if ( ! panel_profile_is_writable_background_type (toplevel) ||
435
! panel_profile_is_writable_background_color (toplevel))
438
color.gdk.red = dropped [0];
439
color.gdk.green = dropped [1];
440
color.gdk.blue = dropped [2];
443
panel_profile_set_background_color (toplevel, &color);
444
panel_profile_set_background_type (toplevel, PANEL_BACK_COLOR);
450
drop_url (PanelWidget *panel,
455
settings = get_settings_background_for_toplevel (toplevel);
457
if (!g_settings_is_writable (settings,
458
PANEL_BACKGROUND_TYPE_KEY) ||
459
!g_settings_is_writable (settings,
460
PANEL_BACKGROUND_COLOR_KEY)) {
461
g_object_unref (settings);
465
color.red = dropped [0] / 65535.;
466
color.green = dropped [1] / 65535.;
467
color.blue = dropped [2] / 65535.;
470
color_str = gdk_rgba_to_string (&color);
472
g_settings_set_string (settings, PANEL_BACKGROUND_COLOR_KEY, color_str);
473
g_settings_set_enum (settings, PANEL_BACKGROUND_TYPE_KEY, PANEL_BACK_COLOR);
476
g_object_unref (settings);
482
reset_background (PanelToplevel *toplevel)
486
settings = get_settings_background_for_toplevel (toplevel);
488
if (!g_settings_is_writable (settings,
489
PANEL_BACKGROUND_TYPE_KEY)) {
490
g_object_unref (settings);
494
g_settings_set_enum (settings, PANEL_BACKGROUND_TYPE_KEY, PANEL_BACK_NONE);
496
g_object_unref (settings);
502
drop_url (PanelWidget *panel,
503
PanelObjectPackType pack_type,
455
508
NETSCAPE_URL_URL,
493
drop_menu (PanelWidget *panel,
495
const char *menu_filename,
496
const char *menu_path)
547
drop_menu (PanelWidget *panel,
548
PanelObjectPackType pack_type,
550
const char *menu_filename,
551
const char *menu_path)
498
if (!panel_profile_id_lists_are_writable ())
553
if (!panel_layout_is_writable ())
501
556
return panel_menu_button_create (panel->toplevel,
557
pack_type, pack_index,
511
drop_uri (PanelWidget *panel,
514
const char *fallback_icon)
565
drop_uri (PanelWidget *panel,
566
PanelObjectPackType pack_type,
569
const char *fallback_icon)
541
596
comment = g_strdup_printf (_("Open '%s'"), buf);
544
panel_launcher_create_from_info (panel->toplevel, position, FALSE,
545
uri, name, comment, icon);
599
panel_launcher_create_from_info (panel->toplevel, pack_type, pack_index,
600
FALSE, uri, name, comment, icon);
548
603
g_free (comment);
568
id = panel_profile_get_toplevel_id (panel->toplevel);
624
id = panel_toplevel_get_id (panel->toplevel);
569
625
basename = uri + strlen ("x-nautilus-desktop:///");
571
627
if (strncmp (basename, "trash", strlen ("trash")) == 0)
572
panel_applet_frame_create (panel->toplevel, pos,
628
panel_applet_frame_create (panel->toplevel, pack_type, pack_index,
573
629
"OAFIID:GNOME_Panel_TrashApplet");
574
else if (strncmp (basename, "home", strlen ("home")) == 0)
575
panel_launcher_create_with_id (id, pos,
576
"nautilus-home.desktop");
577
else if (strncmp (basename, "computer", strlen ("computer")) == 0)
578
panel_launcher_create_with_id (id, pos,
579
"nautilus-computer.desktop");
630
else if (strncmp (basename, "home", strlen ("home")) == 0) {
635
file = g_file_new_for_path (g_get_home_dir ());
636
uri = g_file_get_uri (file);
637
name = panel_util_get_label_for_uri (uri);
639
g_object_unref (file);
641
panel_launcher_create_from_info (panel->toplevel,
642
pack_type, pack_index,
644
"nautilus --no-desktop", /* exec */
646
_("Open your personal folder"), /* comment */
647
PANEL_ICON_HOME); /* icon name */
650
} else if (strncmp (basename, "computer", strlen ("computer")) == 0)
651
panel_launcher_create_from_info (panel->toplevel,
652
pack_type, pack_index,
654
"nautilus --no-desktop computer://", /* exec */
655
_("Computer"), /* name */
656
_("Browse all local and remote disks and folders accessible from this computer"), /* comment */
657
PANEL_ICON_COMPUTER); /* icon name */
580
658
else if (strncmp (basename, "network", strlen ("network")) == 0)
581
panel_launcher_create_with_id (id, pos,
582
"nautilus-scheme.desktop");
659
panel_launcher_create_from_info (panel->toplevel,
660
pack_type, pack_index,
662
"nautilus --no-desktop network://", /* exec */
663
_("Network"), /* name */
664
_("Browse bookmarked and local network locations"), /* comment */
665
PANEL_ICON_NETWORK); /* icon name */
590
drop_urilist (PanelWidget *panel,
673
drop_urilist (PanelWidget *panel,
674
PanelObjectPackType pack_type,
595
683
gboolean success;
598
686
uris = g_uri_list_extract_uris (urilist);
687
home = g_file_new_for_path (g_get_home_dir ());
688
trash = g_file_new_for_uri ("trash://");
689
computer = g_file_new_for_uri ("computer://");
690
network = g_file_new_for_uri ("network://");
601
693
for (i = 0; uris[i]; i++) {
615
707
/* FIXME: probably do this only on link,
616
708
* in fact, on link always set up a link,
617
709
* on copy do all the other stuff. Or something. */
618
if ( ! drop_url (panel, pos, uri))
710
if ( ! drop_url (panel, pack_type, pack_index, uri))
623
715
if (g_ascii_strncasecmp (uri, "x-nautilus-desktop:",
624
716
strlen ("x-nautilus-desktop:")) == 0) {
625
success = drop_nautilus_desktop_uri (panel, pos, uri);
717
success = drop_nautilus_desktop_uri (panel,
718
pack_type, pack_index,
629
723
file = g_file_new_for_uri (uri);
725
if (g_file_equal (home, file)) {
726
success = drop_nautilus_desktop_uri (panel,
727
pack_type, pack_index,
728
"x-nautilus-desktop:///home");
729
g_object_unref (file);
731
} else if (g_file_equal (trash, file)) {
732
success = drop_nautilus_desktop_uri (panel,
733
pack_type, pack_index,
734
"x-nautilus-desktop:///trash");
735
g_object_unref (file);
737
} else if (g_file_equal (computer, file)) {
738
success = drop_nautilus_desktop_uri (panel,
739
pack_type, pack_index,
740
"x-nautilus-desktop:///computer");
741
g_object_unref (file);
743
} else if (g_file_equal (network, file)) {
744
success = drop_nautilus_desktop_uri (panel,
745
pack_type, pack_index,
746
"x-nautilus-desktop:///network");
747
g_object_unref (file);
630
751
info = g_file_query_info (file,
631
752
"standard::type,"
632
753
"standard::content-type,"
652
773
(!strcmp (mime, "application/x-gnome-app-info") ||
653
774
!strcmp (mime, "application/x-desktop") ||
654
775
!strcmp (mime, "application/x-kde-app-info"))) {
655
if (panel_profile_id_lists_are_writable ())
656
panel_launcher_create (panel->toplevel, pos, uri);
776
if (panel_layout_is_writable ())
777
panel_launcher_create (panel->toplevel,
778
pack_type, pack_index,
659
782
} else if (type != G_FILE_TYPE_DIRECTORY && can_exec) {
662
785
filename = g_file_get_path (file);
664
if (panel_profile_id_lists_are_writable ())
787
if (panel_layout_is_writable ())
665
788
/* executable and local, so add a
666
789
* launcher with it */
667
790
ask_about_launcher (filename, panel,
671
794
g_free (filename);
673
if (!drop_uri (panel, pos, uri,
796
if (!drop_uri (panel, pack_type, pack_index, uri,
674
797
PANEL_ICON_UNKNOWN))
678
if (!drop_uri (panel, pos, uri, PANEL_ICON_UNKNOWN))
801
if (!drop_uri (panel, pack_type, pack_index,
802
uri, PANEL_ICON_UNKNOWN))
683
807
g_object_unref (file);
810
g_object_unref (home);
811
g_object_unref (trash);
812
g_object_unref (computer);
813
g_object_unref (network);
686
814
g_strfreev (uris);
692
drop_internal_icon (PanelWidget *panel,
694
const char *icon_name,
820
drop_internal_icon (PanelWidget *panel,
821
PanelObjectPackType pack_type,
823
const char *icon_name,
697
826
Launcher *old_launcher = NULL;
702
if (!panel_profile_id_lists_are_writable ())
831
if (!panel_layout_is_writable ())
705
834
if (action == GDK_ACTION_MOVE)
706
835
old_launcher = find_launcher (icon_name);
708
if (!panel_launcher_create_copy (panel->toplevel, pos, icon_name))
837
if (!panel_launcher_create_copy (panel->toplevel, pack_type, pack_index,
711
841
if (old_launcher && old_launcher->button) {
842
const char *object_id;
712
844
if (old_launcher->prop_dialog) {
713
845
g_signal_handler_disconnect (old_launcher->button,
714
846
old_launcher->destroy_handler);
715
847
launcher_properties_destroy (old_launcher);
717
panel_profile_delete_object (old_launcher->info);
850
object_id = panel_applet_get_id (old_launcher->info);
851
panel_layout_delete_object (object_id);
724
move_applet (PanelWidget *panel, int pos, int applet_index)
858
move_applet (PanelWidget *panel,
859
PanelObjectPackType pack_type,
726
863
GSList *applet_list;
727
864
AppletInfo *info;
732
869
info = g_slist_nth_data (applet_list, applet_index);
734
if ( ! panel_applet_can_freely_move (info))
871
if (info == NULL || info->widget == NULL ||
872
!panel_applet_can_freely_move (info))
740
875
parent = gtk_widget_get_parent (info->widget);
743
info->widget != NULL &&
877
if (parent != NULL &&
745
878
PANEL_IS_WIDGET (parent)) {
747
forb = g_object_get_data (G_OBJECT (info->widget),
748
PANEL_APPLET_FORBIDDEN_PANELS);
749
if ( ! g_slist_find (forb, panel))
750
panel_widget_reparent (PANEL_WIDGET (parent),
879
panel_widget_reparent (PANEL_WIDGET (parent),
882
pack_type, pack_index);
760
drop_internal_applet (PanelWidget *panel, int pos, const char *applet_type,
889
drop_internal_applet (PanelWidget *panel,
890
PanelObjectPackType pack_type,
892
const char *applet_type,
763
895
int applet_index = -1;
764
896
gboolean remove_applet = FALSE;
767
899
if (applet_type == NULL)
770
if (sscanf (applet_type, "MENU:%d", &applet_index) == 1 ||
771
sscanf (applet_type, "DRAWER:%d", &applet_index) == 1) {
902
if (sscanf (applet_type, "MENU:%d", &applet_index) == 1) {
772
903
if (action != GDK_ACTION_MOVE)
773
g_warning ("Only MOVE supported for menus/drawers");
774
success = move_applet (panel, pos, applet_index);
904
g_warning ("Only MOVE supported for menus");
905
success = move_applet (panel, pack_type, pack_index, applet_index);
776
907
} else if (strncmp (applet_type, "MENU:", strlen ("MENU:")) == 0) {
777
908
const char *menu;
783
914
if (!menu_path) {
784
915
if (strncmp (menu, "MAIN", strlen ("MAIN")) == 0)
785
success = drop_menu (panel, pos, NULL, NULL);
916
success = drop_menu (panel, pack_type, pack_index,
787
success = drop_menu (panel, pos, menu, NULL);
919
success = drop_menu (panel, pack_type, pack_index,
789
922
char *menu_filename;
791
924
menu_filename = g_strndup (menu, menu_path - menu);
793
success = drop_menu (panel, pos,
926
success = drop_menu (panel, pack_type, pack_index,
794
927
menu_filename, menu_path);
795
928
g_free (menu_filename);
798
} else if (!strcmp (applet_type, "DRAWER:NEW")) {
799
if (panel_profile_id_lists_are_writable ()) {
800
panel_drawer_create (panel->toplevel, pos, NULL, FALSE, NULL);
806
931
} else if (!strncmp (applet_type, "ACTION:", strlen ("ACTION:"))) {
807
if (panel_profile_id_lists_are_writable ()) {
932
if (panel_layout_is_writable ()) {
808
933
remove_applet = panel_action_button_load_from_drag (
935
pack_type, pack_index,
818
943
} else if (!strcmp (applet_type, "MENUBAR:NEW")) {
819
if (panel_profile_id_lists_are_writable ()) {
820
panel_menu_bar_create (panel->toplevel, pos);
944
if (panel_layout_is_writable ()) {
945
panel_menu_bar_create (panel->toplevel,
946
pack_type, pack_index);
826
952
} else if (!strcmp(applet_type,"SEPARATOR:NEW")) {
827
if (panel_profile_id_lists_are_writable ()) {
828
panel_separator_create (panel->toplevel, pos);
953
if (panel_layout_is_writable ()) {
954
panel_separator_create (panel->toplevel,
955
pack_type, pack_index);
961
} else if (!strcmp (applet_type, "USERMENU:NEW")) {
962
if (panel_layout_is_writable ()) {
963
panel_user_menu_create (panel->toplevel,
964
pack_type, pack_index);
834
970
} else if (!strcmp(applet_type,"LAUNCHER:ASK")) {
835
if (panel_profile_id_lists_are_writable ()) {
836
ask_about_launcher (NULL, panel, pos, TRUE);
971
if (panel_layout_is_writable ()) {
972
ask_about_launcher (NULL, panel, pack_type);
957
if (panel_lockdown_get_locked_down ())
1093
if (panel_lockdown_get_panels_locked_down_s ())
960
if (info == TARGET_APPLET_INTERNAL) {
961
GtkWidget *source_widget;
963
source_widget = gtk_drag_get_source_widget (context);
965
if (BUTTON_IS_WIDGET (source_widget)) {
968
forb = g_object_get_data (G_OBJECT (source_widget),
969
PANEL_APPLET_FORBIDDEN_PANELS);
971
if (g_slist_find (forb, panel))
976
1096
if (info == TARGET_ICON_INTERNAL ||
977
1097
info == TARGET_APPLET_INTERNAL) {
978
1098
if (gdk_drag_context_get_actions (context) & GDK_ACTION_MOVE)
1054
1174
panel_toplevel_queue_auto_hide (toplevel);
1058
panel_receive_dnd_data (PanelWidget *panel,
1061
GtkSelectionData *selection_data,
1062
GdkDragContext *context,
1178
panel_receive_dnd_data (PanelWidget *panel,
1180
PanelObjectPackType pack_type,
1182
GtkSelectionData *selection_data,
1183
GdkDragContext *context,
1065
1186
const guchar *data;
1066
1187
gboolean success = FALSE;
1068
if (panel_lockdown_get_locked_down ()) {
1189
if (panel_lockdown_get_panels_locked_down_s ()) {
1069
1190
gtk_drag_finish (context, FALSE, FALSE, time_);
1075
1196
switch (info) {
1076
1197
case TARGET_URL:
1077
success = drop_urilist (panel, pos, (char *)data);
1198
success = drop_urilist (panel, pack_type, pack_index, (char *)data);
1079
1200
case TARGET_NETSCAPE_URL:
1080
success = drop_url (panel, pos, (char *)data);
1201
success = drop_url (panel, pack_type, pack_index, (char *)data);
1082
1203
case TARGET_COLOR:
1083
1204
success = set_background_color (panel->toplevel, (guint16 *) data);
1086
1207
success = set_background_image_from_uri (panel->toplevel, (char *) data);
1088
1209
case TARGET_BACKGROUND_RESET:
1089
if (panel_profile_is_writable_background_type (panel->toplevel)) {
1090
panel_profile_set_background_type (panel->toplevel, PANEL_BACK_NONE);
1210
success = reset_background (panel->toplevel);
1096
1212
case TARGET_DIRECTORY:
1097
success = drop_uri (panel, pos, (char *)data,
1213
success = drop_uri (panel, pack_type, pack_index, (char *)data,
1098
1214
PANEL_ICON_FOLDER);
1100
1216
case TARGET_APPLET:
1102
1218
gtk_drag_finish (context, FALSE, FALSE, time_);
1105
if (panel_profile_id_lists_are_writable ()) {
1106
panel_applet_frame_create (panel->toplevel, pos, (char *) data);
1221
if (panel_layout_is_writable ()) {
1222
panel_applet_frame_create (panel->toplevel,
1223
pack_type, pack_index,
1107
1225
success = TRUE;
1109
1227
success = FALSE;
1112
1230
case TARGET_APPLET_INTERNAL:
1113
success = drop_internal_applet (panel, pos, (char *)data,
1231
success = drop_internal_applet (panel, pack_type, pack_index,
1114
1233
gdk_drag_context_get_selected_action (context));
1116
1235
case TARGET_ICON_INTERNAL:
1117
success = drop_internal_icon (panel, pos, (char *)data,
1236
success = drop_internal_icon (panel, pack_type, pack_index,
1118
1238
gdk_drag_context_get_selected_action (context));
1150
1271
panel_widget = panel_toplevel_get_panel_widget (PANEL_TOPLEVEL (widget));
1152
pos = panel_widget_get_cursorloc (panel_widget);
1273
panel_widget_get_insert_at_cursor (panel_widget, &pack_type, &pack_index);
1155
* -1 passed to panel_applet_register will turn on
1156
* the insert_at_pos flag for panel_widget_add_full,
1157
* which will not place it after the first applet.
1161
else if(pos > panel_widget->size)
1162
pos = panel_widget->size;
1164
1275
panel_receive_dnd_data (
1165
panel_widget, info, pos, selection_data, context, time);
1276
panel_widget, info, pack_type, pack_index,
1277
selection_data, context, time);
1203
1311
pd = g_new0 (PanelData,1);
1204
1312
pd->menu = NULL;
1205
1313
pd->panel = GTK_WIDGET (toplevel);
1206
pd->insertion_pos = -1;
1314
pd->insert_pack_type = PANEL_OBJECT_PACK_START;
1207
1315
pd->deactivate_idle = 0;
1209
1317
panel_list = g_slist_append (panel_list, pd);
1211
1319
g_object_set_data (G_OBJECT (toplevel), "PanelData", pd);
1213
panel_lockdown_notify_add (G_CALLBACK (panel_recreate_context_menu),
1216
1321
panel_widget_setup (panel_widget);
1218
1323
g_signal_connect (toplevel, "drag_data_received",
1230
1335
G_CALLBACK (panel_key_press_event), NULL);
1231
1336
g_signal_connect (toplevel, "button-press-event",
1232
1337
G_CALLBACK (panel_button_press_event), NULL);
1233
g_signal_connect (toplevel, "popup-menu",
1234
G_CALLBACK (panel_popup_menu_signal), NULL);
1236
1339
g_signal_connect_swapped (toplevel, "notify::orientation",
1237
1340
G_CALLBACK (panel_orient_change), panel_widget);
1250
1353
return gtk_window_get_screen (GTK_WINDOW (panel->toplevel));
1254
panel_is_applet_right_stick (GtkWidget *applet)
1257
PanelWidget *panel_widget;
1259
g_return_val_if_fail (GTK_IS_WIDGET (applet), FALSE);
1261
parent = gtk_widget_get_parent (applet);
1263
g_return_val_if_fail (PANEL_IS_WIDGET (parent), FALSE);
1265
panel_widget = PANEL_WIDGET (parent);
1267
if (!panel_toplevel_get_expand (panel_widget->toplevel))
1270
return panel_widget_is_applet_stuck (panel_widget, applet);
1274
1357
panel_delete_without_query (PanelToplevel *toplevel)
1276
PanelWidget *panel_widget;
1278
panel_widget = panel_toplevel_get_panel_widget (toplevel);
1280
if (panel_toplevel_get_is_attached (toplevel) &&
1281
panel_widget->master_widget) {
1284
info = g_object_get_data (G_OBJECT (panel_widget->master_widget),
1287
panel_profile_delete_object (info);
1289
panel_profile_delete_toplevel (toplevel);
1359
panel_layout_delete_toplevel (panel_toplevel_get_id (toplevel));
1318
1388
GtkWidget *dialog;
1322
if (panel_toplevel_get_is_attached (toplevel)) {
1323
text1 = _("Delete this drawer?");
1324
text2 = _("When a drawer is deleted, the drawer and its\n"
1325
"settings are lost.");
1327
text1 = _("Delete this panel?");
1328
text2 = _("When a panel is deleted, the panel and its\n"
1329
"settings are lost.");
1332
1390
dialog = gtk_message_dialog_new (
1333
1391
GTK_WINDOW (toplevel),
1334
1392
GTK_DIALOG_MODAL,
1335
1393
GTK_MESSAGE_WARNING,
1336
1394
GTK_BUTTONS_NONE,
1395
"%s", _("Delete this panel?"));
1339
1397
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
1399
_("When a panel is deleted, the panel and its\n"
1400
"settings are lost."));
1341
1402
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
1342
1403
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
1343
1404
GTK_STOCK_DELETE, GTK_RESPONSE_OK,
1390
1451
panel_delete (PanelToplevel *toplevel)
1453
GSettings *settings;
1392
1455
PanelWidget *panel_widget;
1457
settings = g_settings_new (PANEL_GENERAL_SCHEMA);
1458
confirm = g_settings_get_boolean (settings,
1459
PANEL_GENERAL_CONFIRM_PANEL_REMOVAL_KEY);
1460
g_object_unref (settings);
1394
1462
panel_widget = panel_toplevel_get_panel_widget (toplevel);
1396
if (!panel_global_config_get_confirm_panel_remove () ||
1397
1465
!g_list_length (panel_widget->applet_list)) {
1398
1466
panel_delete_without_query (toplevel);