static gboolean drag_motion_cb (GtkWidget *widget, GdkDragContext *context, int x, int y, guint time_, Drawer *drawer) { PanelWidget *panel_widget; guint info = 0; if (!panel_check_dnd_target_data (widget, context, &info, NULL)) return FALSE; panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel); if (!panel_check_drop_forbidden (panel_widget, context, info, time_)) return FALSE; if (drawer->close_timeout_id) g_source_remove (drawer->close_timeout_id); drawer->close_timeout_id = 0; button_widget_set_dnd_highlight (BUTTON_WIDGET (widget), TRUE); if (panel_toplevel_get_is_hidden (drawer->toplevel)) { panel_toplevel_unhide (drawer->toplevel); drawer->opened_for_drag = TRUE; } return TRUE; }
static void drawer_click (GtkWidget *w, Drawer *drawer) { if (!panel_toplevel_get_is_hidden (drawer->toplevel)) panel_toplevel_hide (drawer->toplevel, FALSE, -1); else panel_toplevel_unhide (drawer->toplevel); }
/* * This function implements Esc moving focus from the drawer to the drawer * icon and closing the drawer and Shift+Esc moving focus from the drawer * to the drawer icon without closing the drawer when focus is in the drawer. */ static gboolean key_press_drawer_widget (GtkWidget *widget, GdkEventKey *event, Drawer *drawer) { PanelWidget *panel_widget; if (event->keyval != GDK_KEY_Escape) return FALSE; panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel); gtk_window_present (GTK_WINDOW (panel_widget->toplevel)); if ((event->state & gtk_accelerator_get_default_mod_mask ()) == GDK_SHIFT_MASK || panel_toplevel_get_is_hidden (drawer->toplevel)) return TRUE; panel_toplevel_hide (drawer->toplevel, FALSE, -1); return TRUE; }
static gboolean key_press_drawer (GtkWidget *widget, GdkEventKey *event, Drawer *drawer) { gboolean retval = TRUE; GtkOrientation orient; if (event->state & gtk_accelerator_get_default_mod_mask ()) return FALSE; orient = PANEL_WIDGET (gtk_widget_get_parent (drawer->button))->orient; switch (event->keyval) { case GDK_KEY_Up: case GDK_KEY_KP_Up: if (orient == GTK_ORIENTATION_HORIZONTAL) { if (!panel_toplevel_get_is_hidden (drawer->toplevel)) drawer_focus_panel_widget (drawer, GTK_DIR_TAB_BACKWARD); } else { /* let default focus movement happen */ retval = FALSE; } break; case GDK_KEY_Left: case GDK_KEY_KP_Left: if (orient == GTK_ORIENTATION_VERTICAL) { if (!panel_toplevel_get_is_hidden (drawer->toplevel)) drawer_focus_panel_widget (drawer, GTK_DIR_TAB_BACKWARD); } else { /* let default focus movement happen */ retval = FALSE; } break; case GDK_KEY_Down: case GDK_KEY_KP_Down: if (orient == GTK_ORIENTATION_HORIZONTAL) { if (!panel_toplevel_get_is_hidden (drawer->toplevel)) drawer_focus_panel_widget (drawer, GTK_DIR_TAB_FORWARD); } else { /* let default focus movement happen */ retval = FALSE; } break; case GDK_KEY_Right: case GDK_KEY_KP_Right: if (orient == GTK_ORIENTATION_VERTICAL) { if (!panel_toplevel_get_is_hidden (drawer->toplevel)) drawer_focus_panel_widget (drawer, GTK_DIR_TAB_FORWARD); } else { /* let default focus movement happen */ retval = FALSE; } break; case GDK_KEY_Escape: panel_toplevel_hide (drawer->toplevel, FALSE, -1); break; default: retval = FALSE; break; } return retval; }