static gboolean window_menu_key_press_event(GtkWidget* widget, GdkEventKey* event, WindowMenu* window_menu) { GtkMenuShell* menu_shell; WnckSelector* selector; switch (event->keyval) { case GDK_KEY_KP_Enter: case GDK_KEY_ISO_Enter: case GDK_KEY_3270_Enter: case GDK_KEY_Return: case GDK_KEY_space: case GDK_KEY_KP_Space: selector = WNCK_SELECTOR(window_menu->selector); /* * We need to call _gtk_menu_shell_activate() here as is done in * window_key_press_handler in gtkmenubar.c which pops up menu * when F10 is pressed. * * As that function is private its code is replicated here. */ menu_shell = GTK_MENU_SHELL(selector); gtk_menu_shell_select_first(menu_shell, FALSE); return TRUE; default: break; } return FALSE; }
static void wnck_selector_finalize (GObject *object) { WnckSelector *selector; selector = WNCK_SELECTOR (object); if (selector->priv->window_hash) g_hash_table_destroy (selector->priv->window_hash); selector->priv->window_hash = NULL; G_OBJECT_CLASS (wnck_selector_parent_class)->finalize (object); }
static void wnck_selector_dispose (GObject *object) { WnckSelector *selector; selector = WNCK_SELECTOR (object); if (selector->priv->menu) gtk_widget_destroy (selector->priv->menu); selector->priv->menu = NULL; selector->priv->image = NULL; selector->priv->icon_window = NULL; G_OBJECT_CLASS (wnck_selector_parent_class)->dispose (object); }
static GObject * wnck_selector_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { GObject *obj; obj = G_OBJECT_CLASS (wnck_selector_parent_class)->constructor ( type, n_construct_properties, construct_properties); wnck_selector_fill (WNCK_SELECTOR (obj)); return obj; }
static void wnck_selector_unrealize (GtkWidget *widget) { WnckSelector *selector; WnckScreen *screen; GList *l; selector = WNCK_SELECTOR (widget); screen = wnck_selector_get_screen (selector); wnck_selector_disconnect_from_screen (selector, screen); for (l = wnck_screen_get_windows (screen); l; l = l->next) wnck_selector_disconnect_from_window (selector, l->data); GTK_WIDGET_CLASS (wnck_selector_parent_class)->unrealize (widget); }
static gboolean window_menu_key_press_event (GtkWidget *widget, GdkEventKey *event, WindowMenu *window_menu) { GtkMenuShell *menu_shell; WnckSelector *selector; switch (event->keyval) { case GDK_KEY_KP_Enter: case GDK_KEY_ISO_Enter: case GDK_KEY_3270_Enter: case GDK_KEY_Return: case GDK_KEY_space: case GDK_KEY_KP_Space: selector = WNCK_SELECTOR(window_menu->selector); /* * We need to call _gtk_menu_shell_activate() here as is done in * window_key_press_handler in gtkmenubar.c which pops up menu * when F10 is pressed. * * As that function is private its code is replicated here. */ menu_shell = GTK_MENU_SHELL (selector); /* FIXMEgpoo: We need either accessors or a workaround to grab the focus */ #if 0 if (!menu_shell->GSEAL(active)) { gtk_grab_add (GTK_WIDGET (menu_shell)); menu_shell->GSEAL(have_grab) = TRUE; menu_shell->GSEAL(active) = TRUE; } #endif gtk_menu_shell_select_first (menu_shell, FALSE); return TRUE; default: break; } return FALSE; }
static void wnck_selector_realize (GtkWidget *widget) { WnckSelector *selector; WnckScreen *screen; WnckWindow *window; GList *l; GTK_WIDGET_CLASS (wnck_selector_parent_class)->realize (widget); selector = WNCK_SELECTOR (widget); screen = wnck_selector_get_screen (selector); window = wnck_screen_get_active_window (screen); wnck_selector_set_active_window (selector, window); for (l = wnck_screen_get_windows (screen); l; l = l->next) wnck_selector_connect_to_window (selector, l->data); wnck_selector_connect_to_screen (selector, screen); }
static gboolean wnck_selector_scroll_event (GtkWidget *widget, GdkEventScroll *event) { WnckSelector *selector; WnckScreen *screen; WnckWorkspace *workspace; GList *windows_list; GList *l; WnckWindow *window; WnckWindow *previous_window; gboolean should_activate_next_window; selector = WNCK_SELECTOR (widget); screen = wnck_selector_get_screen (selector); workspace = wnck_screen_get_active_workspace (screen); windows_list = wnck_screen_get_windows (screen); windows_list = g_list_sort (windows_list, wnck_selector_windows_compare); /* Walk through the list of windows until we find the active one * (considering only those windows on the same workspace). * Then, depending on whether we're scrolling up or down, activate the next * window in the list (if it exists), or the previous one. */ previous_window = NULL; should_activate_next_window = FALSE; for (l = windows_list; l; l = l->next) { window = WNCK_WINDOW (l->data); if (wnck_window_is_skip_tasklist (window)) continue; if (workspace && !wnck_window_is_pinned (window) && wnck_window_get_workspace (window) != workspace) continue; if (should_activate_next_window) { wnck_window_activate_transient (window, event->time); return TRUE; } if (wnck_window_is_active (window)) { switch (event->direction) { case GDK_SCROLL_UP: if (previous_window != NULL) { wnck_window_activate_transient (previous_window, event->time); return TRUE; } break; case GDK_SCROLL_DOWN: should_activate_next_window = TRUE; break; case GDK_SCROLL_LEFT: case GDK_SCROLL_RIGHT: /* We ignore LEFT and RIGHT scroll events. */ break; case GDK_SCROLL_SMOOTH: break; default: g_assert_not_reached (); } } previous_window = window; } return TRUE; }