/* FIXME remove when gtknotebook's func for this becomes public, bug #.... */ static NemoNotebook * find_notebook_at_pointer (gint abs_x, gint abs_y) { GdkDeviceManager *manager; GdkDevice *pointer; GdkWindow *win_at_pointer, *toplevel_win; gpointer toplevel = NULL; gint x, y; /* FIXME multi-head */ manager = gdk_display_get_device_manager (gdk_display_get_default ()); pointer = gdk_device_manager_get_client_pointer (manager); win_at_pointer = gdk_device_get_window_at_position (pointer, &x, &y); if (win_at_pointer == NULL) { /* We are outside all windows containing a notebook */ return NULL; } toplevel_win = gdk_window_get_toplevel (win_at_pointer); /* get the GtkWidget which owns the toplevel GdkWindow */ gdk_window_get_user_data (toplevel_win, &toplevel); /* toplevel should be an NemoWindow */ if (toplevel != NULL && NEMO_IS_WINDOW (toplevel)) { return NEMO_NOTEBOOK (NEMO_WINDOW (toplevel)->details->active_pane->notebook); } return NULL; }
NemoWindowSlot * nemo_window_pane_open_slot (NemoWindowPane *pane, NemoWindowOpenSlotFlags flags) { NemoWindowSlot *slot; g_assert (NEMO_IS_WINDOW_PANE (pane)); g_assert (NEMO_IS_WINDOW (pane->window)); slot = nemo_window_slot_new (pane); g_signal_handlers_block_by_func (pane->notebook, G_CALLBACK (notebook_switch_page_cb), pane); nemo_notebook_add_tab (NEMO_NOTEBOOK (pane->notebook), slot, (flags & NEMO_WINDOW_OPEN_SLOT_APPEND) != 0 ? -1 : gtk_notebook_get_current_page (GTK_NOTEBOOK (pane->notebook)) + 1, FALSE); g_signal_handlers_unblock_by_func (pane->notebook, G_CALLBACK (notebook_switch_page_cb), pane); pane->slots = g_list_append (pane->slots, slot); return slot; }
static void notebook_popup_menu_move_right_cb (GtkMenuItem *menuitem, gpointer user_data) { NemoWindowPane *pane; pane = NEMO_WINDOW_PANE (user_data); nemo_notebook_reorder_current_child_relative (NEMO_NOTEBOOK (pane->notebook), 1); }
static void action_tabs_move_right_callback (GtkAction *action, gpointer user_data) { NemoWindowPane *pane; NemoWindow *window = user_data; pane = nemo_window_get_active_pane (window); nemo_notebook_reorder_current_child_relative (NEMO_NOTEBOOK (pane->notebook), 1); }
static void action_tabs_previous_callback (GtkAction *action, gpointer user_data) { NemoWindowPane *pane; NemoWindow *window = user_data; pane = nemo_window_get_active_pane (window); nemo_notebook_set_current_page_relative (NEMO_NOTEBOOK (pane->notebook), -1); }
static void notebook_popup_menu_show (NemoWindowPane *pane, GdkEventButton *event) { GtkWidget *popup; GtkWidget *item; GtkWidget *image; int button, event_time; gboolean can_move_left, can_move_right; NemoNotebook *notebook; notebook = NEMO_NOTEBOOK (pane->notebook); can_move_left = nemo_notebook_can_reorder_current_child_relative (notebook, -1); can_move_right = nemo_notebook_can_reorder_current_child_relative (notebook, 1); popup = gtk_menu_new(); item = gtk_menu_item_new_with_mnemonic (_("_New Tab")); g_signal_connect (item, "activate", G_CALLBACK (notebook_popup_menu_new_tab_cb), pane); gtk_menu_shell_append (GTK_MENU_SHELL (popup), item); gtk_menu_shell_append (GTK_MENU_SHELL (popup), gtk_separator_menu_item_new ()); item = gtk_menu_item_new_with_mnemonic (_("Move Tab _Left")); g_signal_connect (item, "activate", G_CALLBACK (notebook_popup_menu_move_left_cb), pane); gtk_menu_shell_append (GTK_MENU_SHELL (popup), item); gtk_widget_set_sensitive (item, can_move_left); item = gtk_menu_item_new_with_mnemonic (_("Move Tab _Right")); g_signal_connect (item, "activate", G_CALLBACK (notebook_popup_menu_move_right_cb), pane); gtk_menu_shell_append (GTK_MENU_SHELL (popup), item); gtk_widget_set_sensitive (item, can_move_right); gtk_menu_shell_append (GTK_MENU_SHELL (popup), gtk_separator_menu_item_new ()); item = gtk_image_menu_item_new_with_mnemonic (_("_Close Tab")); image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); g_signal_connect (item, "activate", G_CALLBACK (notebook_popup_menu_close_cb), pane); gtk_menu_shell_append (GTK_MENU_SHELL (popup), item); gtk_widget_show_all (popup); if (event) { button = event->button; event_time = event->time; } else { button = 0; event_time = gtk_get_current_event_time (); } /* TODO is this correct? */ gtk_menu_attach_to_widget (GTK_MENU (popup), pane->notebook, NULL); gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL, button, event_time); }