static gboolean drag_motion_cb (GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time) { PanelToplevel *toplevel; PanelWidget *panel_widget; guint info; g_return_val_if_fail (PANEL_IS_TOPLEVEL (widget), FALSE); if (!panel_check_dnd_target_data (widget, context, &info, NULL)) return FALSE; toplevel = PANEL_TOPLEVEL (widget); panel_widget = panel_toplevel_get_panel_widget (toplevel); if (!panel_check_drop_forbidden (panel_widget, context, info, time)) return FALSE; do_highlight (widget, TRUE); panel_toplevel_unhide (toplevel); return TRUE; }
gboolean panel_check_dnd_target_data (GtkWidget *widget, GdkDragContext *context, guint *ret_info, GdkAtom *ret_atom) { GList *l; g_return_val_if_fail (widget, FALSE); if (!PANEL_IS_TOPLEVEL (widget) && !BUTTON_IS_WIDGET (widget)) return FALSE; if (!(gdk_drag_context_get_actions (context) & (GDK_ACTION_COPY|GDK_ACTION_MOVE))) return FALSE; for (l = gdk_drag_context_list_targets (context); l; l = l->next) { GdkAtom atom; guint info; atom = GDK_POINTER_TO_ATOM (l->data); if (gtk_target_list_find (get_target_list (), atom, &info)) { if (ret_info) *ret_info = info; if (ret_atom) *ret_atom = atom; break; } } return l ? TRUE : FALSE; }
static void drag_data_recieved_cb (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time) { PanelWidget *panel_widget; PanelObjectPackType pack_type = PANEL_OBJECT_PACK_START; int pack_index = 0; g_return_if_fail (PANEL_IS_TOPLEVEL (widget)); /* we use this only to really find out the info, we already know this is an ok drop site and the info that got passed to us is bogus (it's always 0 in fact) */ if (!panel_check_dnd_target_data (widget, context, &info, NULL)) { gtk_drag_finish (context, FALSE, FALSE, time); return; } panel_widget = panel_toplevel_get_panel_widget (PANEL_TOPLEVEL (widget)); panel_widget_get_insert_at_cursor (panel_widget, &pack_type, &pack_index); panel_receive_dnd_data ( panel_widget, info, pack_type, pack_index, selection_data, context, time); }
GdkScreen * panel_screen_from_panel_widget (PanelWidget *panel) { g_return_val_if_fail (PANEL_IS_WIDGET (panel), NULL); g_return_val_if_fail (PANEL_IS_TOPLEVEL (panel->toplevel), NULL); return gtk_window_get_screen (GTK_WINDOW (panel->toplevel)); }
PanelData * panel_setup (PanelToplevel *toplevel) { PanelWidget *panel_widget; PanelData *pd; g_return_val_if_fail (PANEL_IS_TOPLEVEL (toplevel), NULL); panel_widget = panel_toplevel_get_panel_widget (toplevel); pd = g_new0 (PanelData,1); pd->menu = NULL; pd->panel = GTK_WIDGET (toplevel); pd->insertion_pos = -1; pd->deactivate_idle = 0; panel_list = g_slist_append (panel_list, pd); g_object_set_data (G_OBJECT (toplevel), "PanelData", pd); panel_lockdown_notify_add (G_CALLBACK (panel_recreate_context_menu), pd); panel_widget_setup (panel_widget); g_signal_connect (toplevel, "drag_data_received", G_CALLBACK (drag_data_recieved_cb), NULL); g_signal_connect (toplevel, "drag_motion", G_CALLBACK (drag_motion_cb), NULL); g_signal_connect (toplevel, "drag_leave", G_CALLBACK (drag_leave_cb), NULL); g_signal_connect (toplevel, "drag_drop", G_CALLBACK (drag_drop_cb), NULL); gtk_drag_dest_set (GTK_WIDGET (toplevel), 0, NULL, 0, 0); g_signal_connect (toplevel, "key-press-event", G_CALLBACK (panel_key_press_event), NULL); g_signal_connect (toplevel, "button-press-event", G_CALLBACK (panel_button_press_event), NULL); g_signal_connect (toplevel, "popup-menu", G_CALLBACK (panel_popup_menu_signal), NULL); g_signal_connect_swapped (toplevel, "notify::orientation", G_CALLBACK (panel_orient_change), panel_widget); g_signal_connect (toplevel, "destroy", G_CALLBACK (panel_destroy), pd); return pd; }
static void panel_context_menu_setup_delete_panel_item (GtkWidget *menuitem, PanelToplevel *toplevel) { gboolean sensitive; g_assert (PANEL_IS_TOPLEVEL (toplevel)); sensitive = !panel_toplevel_is_last (toplevel) && !panel_lockdown_get_panels_locked_down_s () && panel_layout_is_writable (); gtk_widget_set_sensitive (menuitem, sensitive); }
static void panel_context_menu_setup_delete_panel_item (GtkWidget *menu, GtkWidget *menuitem) { PanelWidget *panel_widget; gboolean sensitive; panel_widget = menu_get_panel (menu); g_assert (PANEL_IS_TOPLEVEL (panel_widget->toplevel)); sensitive = !panel_toplevel_is_last_unattached (panel_widget->toplevel) && !panel_lockdown_get_locked_down () && panel_profile_id_lists_are_writable (); gtk_widget_set_sensitive (menuitem, sensitive); }
static void panel_context_menu_setup_delete_panel_item (GtkWidget *menu, GtkWidget *menuitem) { PanelWidget *panel_widget; gboolean sensitive; panel_context_menu_check_for_screen (NULL, NULL, NULL); panel_widget = menu_get_panel (menu); g_assert (PANEL_IS_TOPLEVEL (panel_widget->toplevel)); sensitive = !panel_toplevel_is_last (panel_widget->toplevel) && !panel_lockdown_get_panels_locked_down_s () && panel_layout_is_writable (); gtk_widget_set_sensitive (menuitem, sensitive); }
static void drag_data_recieved_cb (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time) { PanelWidget *panel_widget; int pos; g_return_if_fail (PANEL_IS_TOPLEVEL (widget)); /* we use this only to really find out the info, we already know this is an ok drop site and the info that got passed to us is bogus (it's always 0 in fact) */ if (!panel_check_dnd_target_data (widget, context, &info, NULL)) { gtk_drag_finish (context, FALSE, FALSE, time); return; } panel_widget = panel_toplevel_get_panel_widget (PANEL_TOPLEVEL (widget)); pos = panel_widget_get_cursorloc (panel_widget); /* * -1 passed to mate_panel_applet_register will turn on * the insert_at_pos flag for panel_widget_add_full, * which will not place it after the first applet. */ if(pos < 0) pos = -1; else if(pos > panel_widget->size) pos = panel_widget->size; panel_receive_dnd_data ( panel_widget, info, pos, selection_data, context, time); }