Hiroyuki Ikezoe
ikezo****@users*****
Thu Jan 4 09:24:43 JST 2007
Index: kazehakase/src/kz-notebook.c diff -u kazehakase/src/kz-notebook.c:1.4 kazehakase/src/kz-notebook.c:1.5 --- kazehakase/src/kz-notebook.c:1.4 Wed Jan 3 22:41:42 2007 +++ kazehakase/src/kz-notebook.c Thu Jan 4 09:24:43 2007 @@ -52,6 +52,9 @@ typedef struct _KzNotebookPrivate KzNotebookPrivate; struct _KzNotebookPrivate { + /* tabs */ + GList *open_hist; + GList *view_hist; }; #define KZ_NOTEBOOK_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_NOTEBOOK, KzNotebookPrivate)) @@ -126,9 +129,14 @@ static void kz_notebook_init (KzNotebook *notebook) { + KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook); + /* widgets */ notebook->kz = NULL; + priv->open_hist = NULL; + priv->view_hist = NULL; + gtk_drag_dest_set(GTK_WIDGET(notebook), GTK_DEST_DEFAULT_ALL, url_drag_types, G_N_ELEMENTS(url_drag_types), @@ -321,6 +329,7 @@ { KzTabLabel *tab; gchar *title; + KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook); KzEmbed *kzembed = KZ_EMBED(gtk_notebook_get_nth_page(notebook, page_num)); title = kz_embed_ensure_title(kzembed); @@ -334,6 +343,9 @@ gtk_window_set_title(GTK_WINDOW(KZ_NOTEBOOK(notebook)->kz), _("Kazehakase")); } + priv->view_hist = g_list_remove(priv->view_hist, kzembed); + priv->view_hist = g_list_prepend(priv->view_hist, kzembed); + tab = KZ_TAB_LABEL(gtk_notebook_get_tab_label(notebook, GTK_WIDGET(kzembed))); g_return_if_fail(tab); @@ -401,21 +413,38 @@ } KzTabLabel * +kz_notebook_open_new_tab_at_tail (KzNotebook *notebook, KzEmbed *embed, KzTabLabel *label) +{ + KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook); + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), + GTK_WIDGET(embed), + GTK_WIDGET(label)); + /* add to this notebook's history */ + priv->open_hist = g_list_prepend(priv->open_hist, embed); + + return NULL; +} + +KzTabLabel * kz_notebook_open_new_tab (KzNotebook *notebook, KzEmbed *embed, KzTabLabel *label) { gint pos; GtkWidget *sibembed; - KzTabLabel *sibtab; + KzTabLabel *sibtab = NULL; + KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook); pos = get_insert_tab_position (notebook); gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), - GTK_WIDGET(embed), - GTK_WIDGET(label), - pos); + GTK_WIDGET(embed), + GTK_WIDGET(label), + pos); sibembed = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), pos); sibtab = KZ_TAB_LABEL(gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), - sibembed)); + sibembed)); + /* add to this notebook's history */ + priv->open_hist = g_list_prepend(priv->open_hist, embed); return sibtab; } @@ -427,6 +456,7 @@ KzTabLabel *kztab = NULL; KzWindow *kz = notebook->kz; GtkWidget *next = NULL; + KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook); kztab = KZ_TAB_LABEL(gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), widget)); GtkWidget *current = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), @@ -447,20 +477,17 @@ if (ret_page && !strcmp(ret_page, "last_shown")) { GList *node; - const GList *list; - list = kz_window_get_view_history(kz); - if (list && - (node = g_list_next(list))) + if (priv->view_hist && + (node = g_list_next(priv->view_hist))) { next = node->data; } } else if (ret_page && !strcmp(ret_page, "last_created")) { - const GList *node; + GList *node = priv->open_hist; - node = kz_window_get_open_history(kz); for (; node && !next; node = g_list_next(node)) { if (current != node->data) @@ -503,9 +530,39 @@ n_pages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); for (i = n_pages - 1; i >= 0; i--) { - GtkWidget *widget = gtk_notebook_get_nth_page(notebook, i); + GtkWidget *widget = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), i); gtk_widget_destroy(widget); } return TRUE; } +gboolean +kz_notebook_move_tab (KzNotebook *src_notebook, KzNotebook *dest_notebook, GtkWidget *widget) +{ + KzTabLabel *new_kztab; + KzNotebookPrivate *dest_priv, *src_priv; + + /* create new tab label */ + new_kztab = KZ_TAB_LABEL(kz_tab_label_new(dest_notebook->kz, KZ_EMBED(widget))); + + /* move the page to this window */ + g_object_ref(widget); + gtk_container_remove(GTK_CONTAINER(src_notebook), widget); + gtk_notebook_prepend_page(GTK_NOTEBOOK(dest_notebook), + widget, + GTK_WIDGET(new_kztab)); + g_object_unref(widget); + + dest_priv = KZ_NOTEBOOK_GET_PRIVATE(dest_notebook); + src_priv = KZ_NOTEBOOK_GET_PRIVATE(src_notebook); + /* remove view_hist */ + src_priv->view_hist = g_list_remove(src_priv->view_hist, + widget); + /* move open_hist */ + src_priv->open_hist = g_list_remove(src_priv->open_hist, + widget); + dest_priv->open_hist = g_list_prepend(dest_priv->open_hist, + widget); + return TRUE; +} + Index: kazehakase/src/kz-notebook.h diff -u kazehakase/src/kz-notebook.h:1.2 kazehakase/src/kz-notebook.h:1.3 --- kazehakase/src/kz-notebook.h:1.2 Wed Jan 3 22:41:42 2007 +++ kazehakase/src/kz-notebook.h Thu Jan 4 09:24:43 2007 @@ -33,8 +33,10 @@ GType kz_notebook_get_type (void) G_GNUC_CONST; GtkWidget *kz_notebook_new (KzWindow *kz); KzTabLabel *kz_notebook_open_new_tab (KzNotebook *notebook, KzEmbed *embed, KzTabLabel *label); +KzTabLabel *kz_notebook_open_new_tab_at_tail(KzNotebook *notebook, KzEmbed *embed, KzTabLabel *label); gboolean kz_notebook_close_tab (KzNotebook *notebook, GtkWidget *widget); gboolean kz_notebook_close_all_tab (KzNotebook *notebook); +gboolean kz_notebook_move_tab (KzNotebook *src_notebook, KzNotebook *dest_notebook, GtkWidget *widget); G_END_DECLS Index: kazehakase/src/kz-tab-label.c diff -u kazehakase/src/kz-tab-label.c:1.84 kazehakase/src/kz-tab-label.c:1.85 --- kazehakase/src/kz-tab-label.c:1.84 Mon Jan 1 22:22:00 2007 +++ kazehakase/src/kz-tab-label.c Thu Jan 4 09:24:43 2007 @@ -30,6 +30,7 @@ #include "kz-icons.h" #include "kz-favicon.h" #include "kz-bookmark-file.h" +#include "kz-notebook.h" enum { PROP_0, Index: kazehakase/src/kz-window.c diff -u kazehakase/src/kz-window.c:1.293 kazehakase/src/kz-window.c:1.294 --- kazehakase/src/kz-window.c:1.293 Wed Jan 3 22:41:42 2007 +++ kazehakase/src/kz-window.c Thu Jan 4 09:24:43 2007 @@ -90,10 +90,6 @@ /* sidebar */ gboolean sidebar_was_shown; - - /* tabs */ - GList *open_hist; - GList *view_hist; GNode *tab_tree; }; #define KZ_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_WINDOW, KzWindowPrivate)) @@ -432,8 +428,6 @@ priv->sidebar_was_shown = FALSE; - priv->open_hist = NULL; - priv->view_hist = NULL; priv->tab_tree = NULL; kz->tabs = kz_bookmark_pure_folder_new(); @@ -873,14 +867,9 @@ gtk_widget_show(GTK_WIDGET(kzembed)); gtk_widget_show(GTK_WIDGET(kztab)); - gtk_notebook_append_page(GTK_NOTEBOOK(kz->notebook), - GTK_WIDGET(kzembed), - GTK_WIDGET(kztab)); + kz_notebook_open_new_tab_at_tail(KZ_NOTEBOOK(kz->notebook), kzembed, kztab); kz_window_set_embed_callbacks(kz, kzembed); - /* add to this window's history */ - priv->open_hist = g_list_prepend(priv->open_hist, kzembed); - /* root node */ if (!priv->tab_tree) priv->tab_tree = g_node_new(NULL); @@ -925,9 +914,6 @@ kz_window_set_embed_callbacks(kz, kzembed); - /* add to this window's history */ - priv->open_hist = g_list_prepend(priv->open_hist, kzembed); - /* root node */ if (!priv->tab_tree) priv->tab_tree = g_node_new(NULL); @@ -1015,7 +1001,6 @@ 0, widget, pos); } - /* FIXME!! It's a hacky way. */ void kz_window_move_tab (KzWindow *kz, GtkWidget *widget) @@ -1055,23 +1040,12 @@ /* move the page to this window */ kz_window_unset_cur_embed_callbacks(src_kz, kzembed); kz_window_unset_embed_callbacks(src_kz, kzembed); - g_object_ref(widget); - gtk_container_remove(GTK_CONTAINER(src_kz->notebook), widget); - gtk_notebook_prepend_page(GTK_NOTEBOOK(kz->notebook), - widget, - GTK_WIDGET(new_kztab)); + + kz_notebook_move_tab(KZ_NOTEBOOK(kz->notebook), KZ_NOTEBOOK(src_kz->notebook), widget); + kz_bookmark_prepend(kz->tabs, new_kztab->history); kz_window_set_embed_callbacks(kz, kzembed); - /* remove view_hist */ - src_priv->view_hist = g_list_remove(src_priv->view_hist, - kzembed); - /* move open_hist */ - src_priv->open_hist = g_list_remove(src_priv->open_hist, - kzembed); - priv->open_hist = g_list_prepend(priv->open_hist, - kzembed); - /* move tab tree */ node = g_node_find(src_priv->tab_tree, G_IN_ORDER, G_TRAVERSE_ALL, widget); @@ -1200,46 +1174,7 @@ return handled; } } -#if 0 - /* Handle accelerators that we want bound, but aren't associated with - * an action */ - for (i = 0; i < G_N_ELEMENTS (extra_keybindings); i++) - { - if (modifier == extra_keybindings[i].modifier && - event->keyval == extra_keybindings[i].keyval) - { - GtkAction *action; - action = gtk_action_group_get_action - (kz->actions, - extra_keybindings[i].action); - gtk_action_activate(action); - return TRUE; - } - } -#endif -#if 0 - if (event->keyval == GDK_F10 && modifier == 0 && - priv->menubar && priv->menubar->parent && - !GTK_WIDGET_VISIBLE(priv->menubar->parent)) - { - /* When F10 is pressed gtk+ automatically opens the menu if the - * menubar is visible, but when the menubar is not visible - * (think fullscreen or popup windows) we show it manually and - * hide again when the user activates or otherwise dismisses - * the menu. - */ - - gulong *handler_id = g_new(gulong, 1); - - *handler_id = g_signal_connect_data (priv->menubar, "deactivate", - G_CALLBACK(menubar_deactivate_cb), - handler_id, (GClosureNotify)g_free, 0); - gtk_widget_show (GTK_WIDGET(priv->menubar->parent)); - gtk_menu_shell_select_first (GTK_MENU_SHELL(priv->menubar), - FALSE); - return TRUE; - } -#endif + return GTK_WIDGET_CLASS(kz_window_parent_class)->key_press_event(widget, event); } @@ -2073,7 +2008,6 @@ GtkAction *action; KzTabLabel *tab; gboolean focus; - KzWindowPrivate *priv = KZ_WINDOW_GET_PRIVATE (kz); g_return_if_fail(KZ_IS_EMBED(cur)); g_return_if_fail(KZ_IS_EMBED(kzembed)); @@ -2130,9 +2064,6 @@ kz_actions_set_sensitive(kz, kzembed); kz_actions_set_tab_sensitive(kz, kzembed); - priv->view_hist = g_list_remove(priv->view_hist, kzembed); - priv->view_hist = g_list_prepend(priv->view_hist, kzembed); - /* set current_position in history */ kz_bookmark_set_current(kz->tabs, page_num); } @@ -2356,9 +2287,7 @@ kz_window_unset_cur_embed_callbacks(kz, kzembed); kz_window_unset_embed_callbacks(kz, kzembed); - priv->view_hist = g_list_remove(priv->view_hist, kzembed); - priv->open_hist = g_list_remove(priv->open_hist, kzembed); - + kz_notebook_close_tab(KZ_NOTEBOOK(kz->notebook), GTK_WIDGET(obj)); kz_statusbar_set_link_text(KZ_STATUSBAR(kz->statusbar), NULL); node = g_node_find(priv->tab_tree, @@ -2378,7 +2307,6 @@ /* FIXME! should move to specifing tab like kz_window_close_tab() */ g_node_destroy(node); - gtk_widget_destroy(GTK_WIDGET(kzembed)); g_signal_emit(kz, kz_window_signals[REMOVE_TAB_SIGNAL], 0, kzembed); } @@ -2813,14 +2741,3 @@ } } -const GList * -kz_window_get_view_history (KzWindow *kz) -{ - return KZ_WINDOW_GET_PRIVATE(kz)->view_hist; -} - -const GList * -kz_window_get_open_history (KzWindow *kz) -{ - return KZ_WINDOW_GET_PRIVATE(kz)->open_hist; -} Index: kazehakase/src/kz-window.h diff -u kazehakase/src/kz-window.h:1.74 kazehakase/src/kz-window.h:1.75 --- kazehakase/src/kz-window.h:1.74 Wed Jan 3 22:41:42 2007 +++ kazehakase/src/kz-window.h Thu Jan 4 09:24:43 2007 @@ -111,7 +111,7 @@ void kz_window_reorder_tab (KzWindow *kz, GtkWidget *widget, gint position); -void kz_window_move_tab (KzWindow *kz, +void kz_window_move_tab (KzWindow *kz, GtkWidget *widget); void kz_window_load_url (KzWindow *kz, const gchar *url); @@ -136,8 +136,6 @@ const gchar *name); gboolean kz_window_activate_tabpop_action (KzWindow *kz, const gchar *name); -const GList *kz_window_get_view_history (KzWindow *kz); -const GList *kz_window_get_open_history (KzWindow *kz); const KzEmbedEventMouse * kz_window_get_mouse_event_info (KzWindow *kz);