1786
1777
midori_browser_get_n_pages (MidoriBrowser* browser)
1789
return granite_widgets_dynamic_notebook_get_n_tabs (
1790
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook));
1792
return gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook));
1797
midori_browser_disconnect_tab (MidoriBrowser* browser,
1801
midori_browser_tab_connected (MidoriBrowser* browser,
1804
return browser->proxy_array &&
1805
(katze_array_get_item_index (browser->proxy_array, midori_view_get_proxy_item (view)) != -1);
1779
return midori_notebook_get_count (MIDORI_NOTEBOOK (browser->notebook));
1809
1783
_midori_browser_remove_tab (MidoriBrowser* browser,
1810
1784
GtkWidget* widget)
1812
MidoriView* view = MIDORI_VIEW (widget);
1814
granite_widgets_dynamic_notebook_remove_tab (
1815
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), midori_view_get_tab (view));
1817
1786
gtk_widget_destroy (widget);
1819
if (midori_browser_tab_connected (browser, view))
1820
midori_browser_disconnect_tab (browser, view);
1823
#ifndef HAVE_GRANITE
1825
midori_browser_notebook_resize (MidoriBrowser* browser,
1826
GdkRectangle* allocation)
1829
gint n = MAX (1, gtk_notebook_get_n_pages (GTK_NOTEBOOK (browser->notebook)));
1830
const gint max_size = 150;
1832
gint icon_size = 16;
1833
GtkAllocation notebook_size;
1836
if (allocation != NULL)
1837
notebook_size.width = allocation->width;
1839
gtk_widget_get_allocation (browser->notebook, ¬ebook_size);
1840
new_size = notebook_size.width / n;
1842
gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (browser->notebook),
1843
GTK_ICON_SIZE_MENU, &icon_size, NULL);
1844
min_size = icon_size;
1845
if (katze_object_get_boolean (browser->settings, "close-buttons-on-tabs"))
1846
min_size += icon_size;
1847
if (new_size < min_size) new_size = min_size;
1848
if (new_size > max_size) new_size = max_size;
1850
if (new_size > browser->last_tab_size - 3
1851
&& new_size < browser->last_tab_size + 3)
1853
browser->last_tab_size = new_size;
1855
children = gtk_container_get_children (GTK_CONTAINER (browser->notebook));
1856
for (; children; children = g_list_next (children))
1858
GtkWidget* view = children->data;
1860
label = gtk_notebook_get_tab_label (GTK_NOTEBOOK(browser->notebook), view);
1861
/* Don't resize empty bin, which is used for thumbnail tabs */
1862
if (GTK_IS_BIN (label) && gtk_bin_get_child (GTK_BIN (label))
1863
&& !katze_object_get_boolean (view, "minimized"))
1864
gtk_widget_set_size_request (label, new_size, -1);
1870
midori_browser_notebook_size_allocate_cb (GtkWidget* widget,
1871
GdkRectangle* allocation,
1872
MidoriBrowser* browser)
1874
#ifndef HAVE_GRANITE
1875
if (!gtk_notebook_get_show_tabs (GTK_NOTEBOOK (browser->notebook)))
1878
midori_browser_notebook_resize (browser, allocation);
5100
4952
g_signal_emit (browser, signals[NEW_WINDOW], 0, NULL, &new_browser);
5101
4953
if (new_browser)
5103
GtkWidget* new_notebook = new_browser->notebook;
5104
4955
gtk_window_move (GTK_WINDOW (new_browser), x, y);
5105
return new_notebook;
5107
else /* No MidoriApp, so this is app or private mode */
5113
midori_browser_notebook_tab_added_cb (GtkWidget* notebook,
5114
GraniteWidgetsTab* tab,
5115
MidoriBrowser* browser)
5117
gint n = granite_widgets_dynamic_notebook_get_tab_position (
5118
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (notebook), tab);
5119
midori_browser_set_current_page (browser, n);
5120
GtkWidget* view = midori_view_new_with_item (NULL, browser->settings);
5121
midori_view_set_tab (MIDORI_VIEW (view), tab);
5122
midori_browser_connect_tab (browser, view);
5123
midori_view_set_uri (MIDORI_VIEW (view), "about:new");
5124
/* FIXME: signal add-tab */
5125
_midori_browser_update_actions (browser);
5126
midori_browser_notebook_page_reordered_cb (GTK_WIDGET (notebook),
5127
MIDORI_VIEW (view), n, browser);
5131
midori_browser_notebook_tab_removed_cb (GtkWidget* notebook,
5132
GraniteWidgetsTab* tab,
5133
MidoriBrowser* browser)
5136
MidoriView* view = MIDORI_VIEW (granite_widgets_tab_get_page (tab));
5137
if (midori_browser_tab_connected (browser, MIDORI_VIEW (view)))
5138
midori_browser_disconnect_tab (browser, MIDORI_VIEW (view));
5144
midori_browser_move_tab_to_notebook (MidoriBrowser* browser,
5146
GraniteWidgetsTab* tab,
5147
GtkWidget* new_notebook)
5149
GraniteWidgetsTab* new_tab = granite_widgets_tab_new ("", NULL, NULL);
5150
g_object_ref (view);
5151
_midori_browser_remove_tab (browser, view);
5152
granite_widgets_dynamic_notebook_insert_tab (
5153
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (new_notebook), new_tab, 0);
5154
midori_view_set_tab (MIDORI_VIEW (view), new_tab);
5155
_midori_browser_update_actions (browser);
5156
midori_browser_connect_tab (midori_browser_get_for_widget (new_notebook), view);
5157
g_object_unref (view);
5161
midori_browser_notebook_tab_switched_cb (GraniteWidgetsDynamicNotebook* notebook,
5162
GraniteWidgetsTab* old_tab,
5163
GraniteWidgetsTab* new_tab,
5164
MidoriBrowser* browser)
5166
gint new_pos = granite_widgets_dynamic_notebook_get_tab_position (notebook, new_tab);
5168
midori_browser_switched_tab (browser,
5169
old_tab ? granite_widgets_tab_get_page (old_tab) : NULL,
5170
MIDORI_VIEW (granite_widgets_tab_get_page (new_tab)), new_pos);
5174
midori_browser_notebook_tab_moved_cb (GtkWidget* notebook,
5175
GraniteWidgetsTab* tab,
5177
gboolean new_window,
5180
MidoriBrowser* browser)
5182
GtkWidget* view = granite_widgets_tab_get_page (tab);
5185
GtkWidget* notebook = midori_browser_notebook_create_window_cb (
5186
browser->notebook, view, x, y, browser);
5187
if (notebook != NULL)
5188
midori_browser_move_tab_to_notebook (browser, view, tab, notebook);
5192
gint new_pos = granite_widgets_dynamic_notebook_get_tab_position (
5193
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (notebook), tab);
5194
midori_browser_notebook_page_reordered_cb (notebook,
5195
MIDORI_VIEW (view), new_pos, browser);
5200
midori_browser_notebook_tab_duplicated_cb (GtkWidget* notebook,
5201
GraniteWidgetsTab* tab,
5202
MidoriBrowser* browser)
5204
GtkWidget* view = granite_widgets_tab_get_page (tab);
5205
midori_view_duplicate (MIDORI_VIEW (view));
5210
midori_browser_notebook_page_added_cb (GtkNotebook* notebook,
5213
MidoriBrowser* browser)
5215
if (!midori_browser_tab_connected (browser, MIDORI_VIEW (child)))
5216
midori_browser_connect_tab (browser, child);
5217
midori_browser_notebook_page_reordered_cb (GTK_WIDGET (notebook),
5218
MIDORI_VIEW (child), page_num, browser);
5222
midori_browser_notebook_switch_page_cb (GtkWidget* notebook,
5225
MidoriBrowser* browser)
5227
midori_browser_switched_tab (browser,
5228
midori_browser_get_current_tab (browser),
5229
MIDORI_VIEW (midori_browser_get_nth_tab (browser, page_num)), page_num);
5233
midori_browser_notebook_page_removed_cb (GtkWidget* notebook,
5236
MidoriBrowser* browser)
5238
if (midori_browser_tab_connected (browser, MIDORI_VIEW (view)))
5239
midori_browser_disconnect_tab (browser, MIDORI_VIEW (view));
5240
midori_browser_notebook_size_allocate_cb (browser->notebook, NULL, browser);
5244
midori_browser_notebook_reorder_tab_cb (GtkNotebook* notebook,
5245
GtkDirectionType arg1,
5249
g_signal_stop_emission_by_name (notebook, "reorder-tab");
5254
midori_browser_menu_item_switch_tab_cb (GtkWidget* menuitem,
5255
MidoriBrowser* browser)
5257
gint page = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menuitem), "index"));
5258
midori_browser_set_current_page (browser, page);
5262
midori_browser_notebook_button_press_event_after_cb (GtkNotebook* notebook,
5263
GdkEventButton* event,
5264
MidoriBrowser* browser)
5266
#if !GTK_CHECK_VERSION(3,0,0) /* TODO */
5267
if (event->window != notebook->event_window)
5271
/* FIXME: Handle double click only when it wasn't handled by GtkNotebook */
5273
/* Open a new tab on double click or middle mouse click */
5274
if (/*(event->type == GDK_2BUTTON_PRESS && event->button == 1)
5275
|| */(event->type == GDK_BUTTON_PRESS && MIDORI_EVENT_NEW_TAB (event)))
5277
GtkWidget* view = midori_browser_add_uri (browser, "about:new");
5278
midori_browser_set_current_tab (browser, view);
5282
else if (event->type == GDK_BUTTON_PRESS && MIDORI_EVENT_CONTEXT_MENU (event))
5284
MidoriContextAction* menu = midori_context_action_new ("NotebookContextMenu", NULL, NULL, NULL);
5285
midori_context_action_add_action_group (menu, browser->action_group);
5286
GList* tabs = midori_browser_get_tabs (browser);
5287
midori_context_action_add_by_name (menu, "TabNew");
5288
midori_context_action_add_by_name (menu, "UndoTabClose");
5289
midori_context_action_add (menu, NULL);
5291
for (; tabs != NULL; tabs = g_list_next (tabs))
5293
const gchar* title = midori_view_get_display_title (tabs->data);
5294
gchar* tab_option = g_strdup_printf ("Tab%u", i);
5295
GtkAction* action = gtk_action_new (tab_option, title, NULL, NULL);
5296
g_free (tab_option);
5297
gtk_action_set_gicon (GTK_ACTION (action), G_ICON (midori_view_get_icon (tabs->data)));
5298
g_object_set_data (G_OBJECT (action), "index", GINT_TO_POINTER (i));
5299
g_signal_connect (action, "activate",
5300
G_CALLBACK (midori_browser_menu_item_switch_tab_cb), browser);
5301
midori_context_action_add (menu, action);
5305
GtkMenu* context_menu = midori_context_action_create_menu (menu, NULL, FALSE);
5306
katze_widget_popup (GTK_WIDGET (notebook), context_menu, NULL,
5307
KATZE_MENU_POSITION_CURSOR);
4956
g_object_ref (view);
4957
midori_browser_disconnect_tab (browser, MIDORI_VIEW (view));
4958
midori_notebook_remove (MIDORI_NOTEBOOK (browser->notebook), MIDORI_TAB (view));
4959
midori_browser_add_tab (new_browser, view);
4960
g_object_unref (view);
4965
midori_browser_notebook_new_tab_cb (GtkWidget* notebook,
4966
MidoriBrowser* browser)
4968
GtkWidget* view = midori_browser_add_uri (browser, "about:new");
4969
midori_browser_set_current_tab (browser, view);
4973
midori_browser_notebook_context_menu_cb (MidoriNotebook* notebook,
4974
MidoriContextAction* menu,
4975
MidoriBrowser* browser)
4977
midori_context_action_add_action_group (menu, browser->action_group);
4978
midori_context_action_add (menu, NULL);
4979
midori_context_action_add_by_name (menu, "TabNew");
4980
midori_context_action_add_by_name (menu, "UndoTabClose");
4984
midori_browser_notebook_tab_context_menu_cb (MidoriNotebook* notebook,
4986
MidoriContextAction* menu,
4987
MidoriBrowser* browser)
4989
midori_context_action_add_action_group (menu, browser->action_group);
4990
midori_context_action_add (menu, NULL);
4991
midori_context_action_add_by_name (menu, "TabNew");
4992
midori_context_action_add_by_name (menu, "UndoTabClose");
4993
if (MIDORI_IS_VIEW (tab))
4995
GtkAction* action = gtk_action_new ("TabDuplicate", _("_Duplicate Current Tab"), NULL, NULL);
4996
g_object_set_data (G_OBJECT (action), "tab", tab);
4997
g_signal_connect (action, "activate",
4998
G_CALLBACK (_action_tab_duplicate_activate), browser);
4999
midori_context_action_add (menu, action);
5315
5004
_action_undo_tab_close_activate (GtkAction* action,
6390
6078
vpaned = gtk_vpaned_new ();
6391
6079
gtk_paned_pack2 (GTK_PANED (hpaned), vpaned, TRUE, FALSE);
6392
6080
gtk_widget_show (vpaned);
6394
/* FIXME: granite: should return GtkWidget* like GTK+ */
6395
browser->notebook = (GtkWidget*)granite_widgets_dynamic_notebook_new ();
6396
granite_widgets_dynamic_notebook_set_allow_new_window (
6397
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), TRUE);
6398
granite_widgets_dynamic_notebook_set_allow_duplication (
6399
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), TRUE);
6400
/* FIXME: work-around a bug */
6401
gtk_widget_show_all (browser->notebook);
6402
granite_widgets_dynamic_notebook_set_group_name (
6403
GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook), PACKAGE_NAME);
6405
browser->notebook = gtk_notebook_new ();
6406
gtk_notebook_set_scrollable (GTK_NOTEBOOK (browser->notebook), TRUE);
6407
#if GTK_CHECK_VERSION (3, 0, 0)
6408
gtk_notebook_set_group_name (GTK_NOTEBOOK (browser->notebook), PACKAGE_NAME);
6410
gtk_notebook_set_group_id (GTK_NOTEBOOK (browser->notebook), GPOINTER_TO_INT (PACKAGE_NAME));
6081
browser->notebook = midori_notebook_new ();
6414
#if !GTK_CHECK_VERSION (3, 0, 0)
6416
/* Remove the inner border between scrollbars and the window border */
6417
GtkRcStyle* rcstyle = gtk_rc_style_new ();
6418
rcstyle->xthickness = 0;
6419
gtk_widget_modify_style (browser->notebook, rcstyle);
6420
g_object_unref (rcstyle);
6423
6083
gtk_paned_pack1 (GTK_PANED (vpaned), browser->notebook, FALSE, FALSE);
6425
/* FIXME menu items */
6426
g_signal_connect (browser->notebook, "tab-added",
6427
G_CALLBACK (midori_browser_notebook_tab_added_cb),
6429
g_signal_connect (browser->notebook, "tab-removed",
6430
G_CALLBACK (midori_browser_notebook_tab_removed_cb),
6432
6084
g_signal_connect (browser->notebook, "tab-switched",
6433
G_CALLBACK (midori_browser_notebook_tab_switched_cb),
6085
G_CALLBACK (midori_browser_switched_tab_cb),
6435
6087
g_signal_connect (browser->notebook, "tab-moved",
6436
G_CALLBACK (midori_browser_notebook_tab_moved_cb),
6438
g_signal_connect (browser->notebook, "tab-duplicated",
6439
G_CALLBACK (midori_browser_notebook_tab_duplicated_cb),
6442
g_signal_connect (browser->notebook, "switch-page",
6443
G_CALLBACK (midori_browser_notebook_switch_page_cb),
6445
g_signal_connect (browser->notebook, "page-reordered",
6446
G_CALLBACK (midori_browser_notebook_page_reordered_cb),
6448
g_signal_connect (browser->notebook, "page-added",
6449
G_CALLBACK (midori_browser_notebook_page_added_cb),
6451
g_signal_connect (browser->notebook, "page-removed",
6452
G_CALLBACK (midori_browser_notebook_page_removed_cb),
6454
g_signal_connect (browser->notebook, "size-allocate",
6455
G_CALLBACK (midori_browser_notebook_size_allocate_cb),
6457
g_signal_connect_after (browser->notebook, "button-press-event",
6458
G_CALLBACK (midori_browser_notebook_button_press_event_after_cb),
6460
g_signal_connect (browser->notebook, "reorder-tab",
6461
G_CALLBACK (midori_browser_notebook_reorder_tab_cb), NULL);
6462
g_signal_connect (browser->notebook, "create-window",
6088
G_CALLBACK (midori_browser_tab_moved_cb),
6090
g_signal_connect (browser->notebook, "context-menu",
6091
G_CALLBACK (midori_browser_notebook_context_menu_cb),
6093
g_signal_connect (browser->notebook, "tab-context-menu",
6094
G_CALLBACK (midori_browser_notebook_tab_context_menu_cb), browser);
6095
g_signal_connect (browser->notebook, "tab-detached",
6463
6096
G_CALLBACK (midori_browser_notebook_create_window_cb), browser);
6097
g_signal_connect (browser->notebook, "new-tab",
6098
G_CALLBACK (midori_browser_notebook_new_tab_cb), browser);
6465
6099
gtk_widget_show (browser->notebook);
6467
6101
/* Inspector container */