]> spindle.queued.net Git - midori/commitdiff
Show close icons in the tab panel, if enabled
authorChristian Dywan <christian@twotoasts.de>
Mon, 27 Jul 2009 21:54:26 +0000 (23:54 +0200)
committerChristian Dywan <christian@twotoasts.de>
Mon, 27 Jul 2009 23:25:46 +0000 (01:25 +0200)
extensions/tab-panel.c

index dae138811f245ba68d13b52feda9df67266e24fb..d4827a83686a7e9ebd750073cc478f094ef5746b 100644 (file)
@@ -19,6 +19,11 @@ tab_panel_app_add_browser_cb (MidoriApp*       app,
                               MidoriBrowser*   browser,
                               MidoriExtension* extension);
 
+static void
+tab_panel_settings_notify_cb (MidoriWebSettings* settings,
+                              GParamSpec*        pspec,
+                              GtkTreeModel*      model);
+
 static void
 tab_panel_deactivate_cb (MidoriExtension* extension,
                          GtkWidget*       panel)
@@ -37,6 +42,8 @@ tab_panel_deactivate_cb (MidoriExtension* extension,
         extension, tab_panel_deactivate_cb, panel);
     g_signal_handlers_disconnect_by_func (
         app, tab_panel_app_add_browser_cb, extension);
+    g_signal_handlers_disconnect_by_func (
+        browser, tab_panel_settings_notify_cb, model);
 }
 
 static void
@@ -167,7 +174,13 @@ midori_extension_button_release_event_cb (GtkWidget*       widget,
         if (event->button == 1)
         {
             MidoriBrowser* browser = midori_browser_get_for_widget (widget);
-            midori_browser_set_current_tab (browser, view);
+            GtkTreeViewColumn* column;
+            if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
+                event->x, event->y, NULL, &column, NULL, NULL)
+                && column == gtk_tree_view_get_column (GTK_TREE_VIEW (widget), 1))
+                gtk_widget_destroy (view);
+            else
+                midori_browser_set_current_tab (browser, view);
         }
         else if (event->button == 2)
             gtk_widget_destroy (view);
@@ -207,6 +220,20 @@ midori_extension_popup_menu_cb (GtkWidget*       widget,
     }
 }
 
+static void
+tab_panel_settings_notify_cb (MidoriWebSettings* settings,
+                              GParamSpec*        pspec,
+                              GtkTreeModel*      model)
+{
+    gboolean buttons = katze_object_get_boolean (settings, "close-buttons-on-tabs");
+    guint i;
+    GtkTreeIter iter;
+
+    i = 0;
+    while (gtk_tree_model_iter_nth_child (model, &iter, NULL, i++))
+        gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 2, buttons, -1);
+}
+
 static void
 tab_panel_browser_add_tab_cb (MidoriBrowser*   browser,
                               GtkWidget*       view,
@@ -216,9 +243,16 @@ tab_panel_browser_add_tab_cb (MidoriBrowser*   browser,
     GtkTreeIter iter;
     GtkWidget* notebook = katze_object_get_object (browser, "notebook");
     gint page = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), view);
-    g_object_unref (notebook);
+    MidoriWebSettings* settings = katze_object_get_object (browser, "settings");
+    gboolean buttons = katze_object_get_boolean (settings, "close-buttons-on-tabs");
+
     gtk_tree_store_insert_with_values (GTK_TREE_STORE (model),
-        &iter, NULL, page, 0, view, -1);
+        &iter, NULL, page, 0, view, 1, GTK_STOCK_CLOSE, 2, buttons, -1);
+    g_signal_connect (settings, "notify::close-buttons-on-tabs",
+        G_CALLBACK (tab_panel_settings_notify_cb), model);
+
+    g_object_unref (notebook);
+    g_object_unref (settings);
 }
 
 static void
@@ -295,6 +329,13 @@ tab_panel_app_add_browser_cb (MidoriApp*       app,
     gtk_tree_view_column_set_cell_data_func (column, renderer_text,
         (GtkTreeCellDataFunc)midori_extension_treeview_render_text_cb,
         treeview, NULL);
+    gtk_tree_view_column_set_expand (column, TRUE);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+    column = gtk_tree_view_column_new ();
+    renderer_pixbuf = gtk_cell_renderer_pixbuf_new ();
+    gtk_tree_view_column_pack_start (column, renderer_pixbuf, FALSE);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer_pixbuf,
+        "stock-id", 1, "follow-state", 2, "visible", 2, NULL);
     gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
     g_object_connect (treeview,
                       "signal::row-activated",
@@ -350,7 +391,8 @@ tab_panel_activate_cb (MidoriExtension* extension,
     MidoriBrowser* browser;
     guint i;
 
-    model = gtk_tree_store_new (2, MIDORI_TYPE_VIEW, G_TYPE_STRING);
+    model = gtk_tree_store_new (3, MIDORI_TYPE_VIEW,
+                                   G_TYPE_STRING, G_TYPE_BOOLEAN);
     g_object_set_data (G_OBJECT (extension), "treemodel", model);
 
     browsers = katze_object_get_object (app, "browsers");