]> spindle.queued.net Git - midori/commitdiff
* Non maintainer upload.
authorYves-Alexis Perez <corsac@debian.org>
Tue, 17 Aug 2010 06:44:35 +0000 (08:44 +0200)
committerYves-Alexis Perez <corsac@debian.org>
Tue, 17 Aug 2010 06:44:35 +0000 (08:44 +0200)
* debian/control:
  - add build-dep on valac to build certain extensions.

debian/changelog
debian/control
debian/patches/debian-changes-0.2.7-1.1 [new file with mode: 0644]
debian/patches/series

index a8047272f2efd3c39bf29b39f9f9cb688d1988fd..99291ac558ab2bdbfc55b536b1eb4634e1265b40 100644 (file)
@@ -10,12 +10,15 @@ midori (0.2.7-1.1) UNRELEASED; urgency=low
     /etc/midori/extensions/libadblock.so (Closes: #573208)
 
   [Yves-Alexis Perez]
+  * Non maintainer upload.
   * New 2.7 upstream release.
   * debian/watch edited to correctly track upstream versions.
   * debian/rules:
     - use --fail-missing in dh_install
+  * debian/control:
+    - add build-dep on valac to build certain extensions.
 
- -- Yves-Alexis Perez <corsac@debian.org>  Tue, 17 Aug 2010 08:16:58 +0200
+ -- Yves-Alexis Perez <corsac@debian.org>  Tue, 17 Aug 2010 08:44:10 +0200
 
 midori (0.2.4-3) unstable; urgency=low
 
index 0d9be4e7cb91319b16edbada8c800d16e16b89cf..bf356a03cfa485fea2e83d1b23489564adb3f1ab 100644 (file)
@@ -20,6 +20,7 @@ Build-Depends: debhelper (>= 7.0.50),
  python-docutils,
  libsoup2.4-dev (>= 2.25.2),
  libnotify-dev,
+ valac,
 # For testing under xvfb:
  xvfb,
  xauth,
diff --git a/debian/patches/debian-changes-0.2.7-1.1 b/debian/patches/debian-changes-0.2.7-1.1
new file mode 100644 (file)
index 0000000..7a072a1
--- /dev/null
@@ -0,0 +1,633 @@
+Description: Upstream changes introduced in version 0.2.7-1.1
+ This patch has been created by dpkg-source during the package build.
+ Here's the last changelog entry, hopefully it gives details on why
+ those changes were made:
+ .
+ midori (0.2.7-1.1) UNRELEASED; urgency=low
+ .
+   [Ryan Niebur]
+   * New Upstream Version (Closes: #582213)
+     - fixes segfault (Closes: #579118)
+     - correct link to FAQ (Closes: #582512)
+   * refresh patches
+   * update copyright
+   * use dpkg-maintscript-helper to remove old config file
+     /etc/midori/extensions/libadblock.so (Closes: #573208)
+ .
+   [Yves-Alexis Perez]
+   * New 2.7 upstream release.
+   * debian/watch edited to correctly track upstream versions.
+   * debian/rules:
+     - use --fail-missing in dh_install
+   * debian/control:
+     - add build-dep on valac to build certain extensions.
+ .
+ The person named in the Author field signed this changelog entry.
+Author: Yves-Alexis Perez <corsac@debian.org>
+Bug-Debian: http://bugs.debian.org/573208
+Bug-Debian: http://bugs.debian.org/579118
+Bug-Debian: http://bugs.debian.org/582213
+Bug-Debian: http://bugs.debian.org/582512
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: <vendor|upstream|other>, <url of original patch>
+Bug: <url in upstream bugtracker>
+Bug-Debian: http://bugs.debian.org/<bugnumber>
+Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
+Forwarded: <no|not-needed|url proving that it has been forwarded>
+Reviewed-By: <name and email of someone who approved the patch>
+Last-Update: <YYYY-MM-DD>
+
+--- /dev/null
++++ midori-0.2.7/.lock-wscript
+@@ -0,0 +1,7 @@
++argv = ['./waf', '--nocache', 'configure', '--prefix', '/usr']
++blddir = '/server/home/ryan52/projects/deb/midori/midori/_build_'
++commands = {'dist': 0, 'configure': True, 'distcheck': 0, 'install': 0, 'build': 0, 'clean': 0, 'distclean': 0, 'check': 0, 'uninstall': 0}
++files = []
++hash = 0
++options = {'enable_apidocs': False, 'disable_hildon': True, 'force': False, 'verbose': 0, 'SHAREDSTATEDIR': '', 'destdir': '', 'disable_libidn': False, 'zones': '', 'enable_libidn': False, 'prefix': '/usr', 'run': False, 'enable_libnotify': False, 'disable_sqlite': False, 'enable_addons': False, 'blddir': '', 'compile_targets': '', 'INFODIR': '', 'nocache': True, 'progress_bar': 0, 'EXEC_PREFIX': '', 'disable_apidocs': True, 'LOCALSTATEDIR': '', 'disable_libnotify': False, 'datadir': '', 'INCLUDEDIR': '', 'build': None, 'LIBEXECDIR': '', 'MANDIR': '', 'PSDIR': '', 'BINDIR': '', 'enable_hildon': False, 'enable_unique': False, 'DOCDIR': '', 'SYSCONFDIR': '', 'jobs': 2, 'DATAROOTDIR': '', 'disable_userdocs': False, 'PDFDIR': '', 'DATADIR': '', 'LIBDIR': '', 'SBINDIR': '', 'disable_docs': False, 'enable_sqlite': False, 'srcdir': '', 'enable_nls': False, 'want_rpath': 1, 'disable_unique': False, 'enable_userdocs': False, 'disable_addons': False, 'disable_maintainer_mode': None, 'debug_level': '', 'HTMLDIR': '', 'LOCALEDIR': '', 'keep': False, 'disable_nls': False, 'enable_docs': False, 'update_po': False, 'DVIDIR': '', 'check_c_compiler': 'gcc icc suncc', 'OLDINCLUDEDIR': ''}
++srcdir = '/server/home/ryan52/projects/deb/midori/midori'
+--- /dev/null
++++ midori-0.2.7/panels/midori-bookmark-store.h
+@@ -0,0 +1,44 @@
++/*
++ Copyright (C) 2009 Christian Dywan <christian@twotoasts.de>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ See the file COPYING for the full license text.
++*/
++
++#ifndef __MIDORI_BOOKMARK_STORE_H__
++#define __MIDORI_BOOKMARK_STORE_H__
++
++#include <gtk/gtk.h>
++
++G_BEGIN_DECLS
++
++#define MIDORI_TYPE_BOOKMARK_STORE \
++    (midori_bookmark_store_get_type ())
++#define MIDORI_BOOKMARK_STORE(obj) \
++    (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIDORI_TYPE_BOOKMARK_STORE, MidoriBookmarkStore))
++#define MIDORI_BOOKMARK_STORE_CLASS(klass) \
++    (G_TYPE_CHECK_CLASS_CAST ((klass), MIDORI_TYPE_BOOKMARK_STORE, MidoriBookmarkStoreClass))
++#define MIDORI_IS_BOOKMARK_STORE(obj) \
++    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MIDORI_TYPE_BOOKMARK_STORE))
++#define MIDORI_IS_BOOKMARK_STORE_CLASS(klass) \
++    (G_TYPE_CHECK_CLASS_TYPE ((klass), MIDORI_TYPE_BOOKMARK_STORE))
++#define MIDORI_BOOKMARK_STORE_GET_CLASS(obj) \
++    (G_TYPE_INSTANCE_GET_CLASS ((obj), MIDORI_TYPE_BOOKMARK_STORE, MidoriBookmarkStoreClass))
++
++typedef struct _MidoriBookmarkStore                MidoriBookmarkStore;
++typedef struct _MidoriBookmarkStoreClass           MidoriBookmarkStoreClass;
++
++GType
++midori_bookmark_store_get_type               (void);
++
++GtkTreeStore*
++midori_bookmark_store_new                    (gint n_columns,
++                                              ...);
++
++G_END_DECLS
++
++#endif /* __MIDORI_BOOKMARK_STORE_H__ */
+--- /dev/null
++++ midori-0.2.7/panels/midori-bookmark-store.c
+@@ -0,0 +1,110 @@
++/*
++ Copyright (C) 2009 Christian Dywan <christian@twotoasts.de>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ See the file COPYING for the full license text.
++*/
++
++#include "midori-bookmark-store.h"
++
++struct _MidoriBookmarkStore
++{
++    GtkTreeStore parent_instance;
++};
++
++struct _MidoriBookmarkStoreClass
++{
++    GtkTreeStoreClass parent_class;
++};
++
++static void
++midori_bookmark_store_drag_source_iface_init (GtkTreeDragSourceIface* iface);
++
++static void
++midori_bookmark_store_drag_dest_iface_init (GtkTreeDragDestIface* iface);
++
++G_DEFINE_TYPE_WITH_CODE (MidoriBookmarkStore, midori_bookmark_store, GTK_TYPE_TREE_STORE,
++                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_SOURCE,
++                                                midori_bookmark_store_drag_source_iface_init)
++                         G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_DRAG_DEST,
++                                                midori_bookmark_store_drag_dest_iface_init));
++
++static void
++midori_bookmark_store_finalize (GObject* object);
++
++static void
++midori_bookmark_store_class_init (MidoriBookmarkStoreClass* class)
++{
++    GObjectClass* gobject_class;
++
++    gobject_class = G_OBJECT_CLASS (class);
++    gobject_class->finalize = midori_bookmark_store_finalize;
++}
++
++static void
++midori_bookmark_store_init (MidoriBookmarkStore* bookmark_store)
++{
++    /* Nothing to do */
++}
++
++static void
++midori_bookmark_store_finalize (GObject* object)
++{
++    /* Nothing to do */
++}
++
++static void
++midori_bookmark_store_drag_source_iface_init (GtkTreeDragSourceIface* iface)
++{
++  /*iface->row_draggable = real_gtk_tree_store_row_draggable;
++  iface->drag_data_delete = gtk_tree_store_drag_data_delete;
++  iface->drag_data_get = gtk_tree_store_drag_data_get;*/
++}
++
++static void
++midori_bookmark_store_drag_dest_iface_init (GtkTreeDragDestIface* iface)
++{
++  /*iface->drag_data_received = gtk_tree_store_drag_data_received;
++  iface->row_drop_possible = gtk_tree_store_row_drop_possible;*/
++}
++
++/**
++ * midori_bookmark_store_new:
++ *
++ * Creates a new empty bookmark_store.
++ *
++ * Return value: a new #MidoriBookmarkStore
++ *
++ * Since: 0.1.8
++ **/
++GtkTreeStore*
++midori_bookmark_store_new (gint n_columns,
++                           ...)
++{
++    GtkTreeStore* treestore;
++    va_list args;
++    gint i;
++    GType* types;
++
++    g_return_val_if_fail (n_columns > 0, NULL);
++
++    treestore = g_object_new (MIDORI_TYPE_BOOKMARK_STORE, NULL);
++
++    va_start (args, n_columns);
++
++    types = g_new (GType, n_columns);
++    for (i = 0; i < n_columns; i++)
++    {
++        GType type = va_arg (args, GType);
++        types[i] = type;
++    }
++    va_end (args);
++
++    gtk_tree_store_set_column_types (treestore, i, types);
++
++    return treestore;
++}
+--- /dev/null
++++ midori-0.2.7/extensions/tab-switcher.c
+@@ -0,0 +1,416 @@
++/*
++ Copyright (C) 2009 André Stösel <Midori-Plugin@PyIT.de>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ See the file COPYING for the full license text.
++*/
++
++#include <midori/midori.h>
++
++enum { TAB_ICON, TAB_NAME, TAB_POINTER, TAB_CELL_COUNT };
++
++static MidoriExtension *thisExtension;
++static gboolean switchEvent;
++
++static GdkPixbuf* tab_selector_get_snapshot(MidoriView* view,
++                                            gint       maxwidth,
++                                            gint       maxheight)
++{
++    GtkWidget* web_view;
++    guint width, height;
++    gfloat factor;
++
++    g_return_val_if_fail (MIDORI_IS_VIEW (view), NULL);
++
++    web_view = midori_view_get_web_view (view);
++
++    if(maxwidth < 0) {
++        maxwidth *= -1;
++    }
++    if(maxheight < 0) {
++        maxheight *= -1;
++    }
++
++    factor = MIN((gfloat) maxwidth / web_view->allocation.width, (gfloat) maxheight / web_view->allocation.height);
++    width = (int)(factor * web_view->allocation.width);
++    height = (int)(factor * web_view->allocation.height);
++
++    return midori_view_get_snapshot(view, width, height);
++}
++
++static void tab_selector_list_foreach (GtkWidget    *view,
++                                       GtkListStore *store)
++{
++    GtkTreeIter it;
++    GdkPixbuf* icon = midori_view_get_icon (MIDORI_VIEW (view));
++    const gchar *title = midori_view_get_display_title (MIDORI_VIEW (view));
++    gtk_list_store_append (store, &it);
++    gtk_list_store_set (store, &it, TAB_ICON, icon, -1);
++    gtk_list_store_set (store, &it, TAB_NAME, title, -1);
++    gtk_list_store_set (store, &it, TAB_POINTER, view, -1);
++}
++
++static GtkWidget* tab_selector_init_window (MidoriBrowser   *browser)
++{
++    GList *list;
++    gint col_offset;
++    GtkCellRenderer *renderer;
++    GtkTreeViewColumn *column;
++    GtkWidget *window, *treeview, *sw, *hbox;
++    GtkListStore *store;
++    GtkWidget *page;
++    GtkWidget *image;
++    GdkPixbuf *snapshot;
++
++    window = gtk_window_new(GTK_WINDOW_POPUP);
++    gtk_window_set_default_size(GTK_WINDOW(window), 320, 20);
++    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
++
++
++    hbox = gtk_hbox_new(FALSE, 1);
++    gtk_container_add(GTK_CONTAINER(window), hbox);
++    gtk_container_set_border_width(GTK_CONTAINER(hbox), 1);
++
++    sw = gtk_scrolled_window_new (NULL, NULL);
++    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
++            GTK_SHADOW_ETCHED_IN);
++    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
++            GTK_POLICY_NEVER,
++            GTK_POLICY_AUTOMATIC);
++
++    gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0);
++
++    store = gtk_list_store_new(TAB_CELL_COUNT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER);
++    treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
++    g_object_set_data(G_OBJECT(window), "tab_selector_treeview", treeview);
++
++    list = g_object_get_data(G_OBJECT(browser), "tab_selector_list");
++    g_list_foreach(list, (GFunc) tab_selector_list_foreach, store);
++
++    g_object_unref(store);
++    g_object_set(treeview, "headers-visible", FALSE, NULL);
++
++    renderer = gtk_cell_renderer_pixbuf_new();
++
++    gtk_tree_view_insert_column_with_attributes(
++            GTK_TREE_VIEW(treeview), -1, "Icon", renderer, "pixbuf", TAB_ICON, NULL);
++
++    renderer = gtk_cell_renderer_text_new();
++
++    col_offset = gtk_tree_view_insert_column_with_attributes(
++            GTK_TREE_VIEW(treeview), -1, "Title", renderer, "text", TAB_NAME, NULL);
++    column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
++    gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
++            GTK_TREE_VIEW_COLUMN_FIXED);
++    gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column),
++            midori_extension_get_integer(thisExtension, "TitleColumnWidth"));
++
++    gtk_container_add (GTK_CONTAINER (sw), treeview);
++
++    page = katze_object_get_object(browser, "tab");
++    snapshot = tab_selector_get_snapshot(MIDORI_VIEW(page),
++            midori_extension_get_integer(thisExtension, "TabPreviewWidth"),
++            midori_extension_get_integer(thisExtension, "TabPreviewHeight"));
++    image = gtk_image_new_from_pixbuf (snapshot);
++    gtk_box_pack_start (GTK_BOX (hbox), image, TRUE, TRUE, 0);
++    g_object_set_data(G_OBJECT(window), "tab_selector_image", image);
++
++    gtk_widget_show_all(window);
++
++    return window;
++}
++
++static void tab_selector_window_walk (  GtkWidget       *window,
++                                        GdkEventKey     *event,
++                                        MidoriBrowser   *browser)
++{
++    gint *pindex, iindex, items;
++    GtkWidget *view;
++    GtkTreeIter iter;
++    GtkTreePath *path;
++    GtkTreeView *treeview;
++    GtkTreeModel *model;
++    GtkTreeViewColumn *column;
++
++    treeview = g_object_get_data (G_OBJECT (window), "tab_selector_treeview");
++    model = gtk_tree_view_get_model (treeview);
++    items = gtk_tree_model_iter_n_children (model, NULL) -1;
++    gtk_tree_view_get_cursor (treeview, &path, &column);
++    pindex = gtk_tree_path_get_indices (path);
++    if(!pindex)
++        return;
++    iindex = *pindex;
++    gtk_tree_path_free(path);
++
++    if (event->state & GDK_SHIFT_MASK)
++        iindex = iindex == 0 ? items : iindex-1;
++    else
++        iindex = iindex == items ? 0 : iindex+1;
++
++    path = gtk_tree_path_new_from_indices(iindex, -1);
++    column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 1);
++    gtk_tree_view_set_cursor (GTK_TREE_VIEW (treeview), path, column, FALSE);
++
++    gtk_tree_model_get_iter (model, &iter, path);
++    gtk_tree_model_get (model, &iter, TAB_POINTER, &view, -1);
++
++    if (midori_extension_get_boolean (thisExtension, "ShowTabInBackground")) {
++        midori_browser_set_current_tab (browser, view);
++    } else {
++        GtkImage *image;
++        GdkPixbuf *snapshot = tab_selector_get_snapshot(MIDORI_VIEW(view),
++                midori_extension_get_integer(thisExtension, "TabPreviewWidth"),
++                midori_extension_get_integer(thisExtension, "TabPreviewHeight"));
++        image = g_object_get_data(G_OBJECT(window), "tab_selector_image");
++        gtk_image_set_from_pixbuf(image, snapshot);
++    }
++    gtk_tree_path_free(path);
++}
++
++static gboolean tab_selector_handle_events (GtkWidget       *widget,
++                                            GdkEventKey     *event,
++                                            MidoriBrowser   *browser)
++{
++    /* tab -> 23
++       ctrl -> 37 */
++    gint treeitems;
++    static GtkWidget *window;
++    if(event->type == GDK_KEY_PRESS && event->hardware_keycode == 23 && event->state & GDK_CONTROL_MASK) {
++        treeitems = gtk_notebook_get_n_pages (GTK_NOTEBOOK (
++                katze_object_get_object(browser, "notebook")));
++        if(treeitems > 1) {
++            if(!GTK_IS_WINDOW(window)) {
++                switchEvent = FALSE;
++                window = tab_selector_init_window(browser);
++            }
++            tab_selector_window_walk(window, event, browser);
++        }
++        return TRUE;
++    } else if(event->type == GDK_KEY_RELEASE && event->hardware_keycode == 37 && GTK_IS_WINDOW(window)) {
++        switchEvent = TRUE;
++        if(midori_extension_get_boolean(thisExtension, "ShowTabInBackground")) {
++            GtkWidget *page;
++            page = katze_object_get_object(browser, "tab");
++
++            GList *list = g_object_get_data(G_OBJECT(browser), "tab_selector_list");
++            list = g_list_remove(list, page);
++            list = g_list_prepend(list, page);
++            g_object_set_data(G_OBJECT(browser), "tab_selector_list", list);
++        } else {
++            GtkTreePath *path;
++            GtkTreeViewColumn *column;
++            GtkTreeIter iter;
++            GtkWidget *view, *treeview;
++            GtkTreeModel *model;
++
++            treeview = g_object_get_data(G_OBJECT(window), "tab_selector_treeview");
++            model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
++
++            gtk_tree_view_get_cursor (
++                    GTK_TREE_VIEW(treeview), &path, &column);
++            gtk_tree_model_get_iter (
++                    model, &iter, path);
++            gtk_tree_model_get (
++                    model, &iter, TAB_POINTER, &view, -1);
++            midori_browser_set_current_tab (browser, view);
++            gtk_tree_path_free (path);
++        }
++        gtk_widget_destroy(window);
++        window = NULL;
++        return TRUE;
++    }
++    return FALSE;
++}
++
++static void tab_selector_switch_page (GtkNotebook     *notebook,
++                                      GtkNotebookPage *page_,
++                                      guint            page_num,
++                                      MidoriBrowser   *browser)
++{
++    if(switchEvent) {
++        /* Don't know why *page_ points to the wrong address */
++        GtkWidget *page;
++        page = katze_object_get_object(browser, "tab");
++
++        GList *list = g_object_get_data(G_OBJECT(browser), "tab_selector_list");
++        list = g_list_remove(list, page);
++        list = g_list_prepend(list, page);
++        g_object_set_data(G_OBJECT(browser), "tab_selector_list", list);
++    }
++}
++
++static void
++tab_selector_browser_add_tab_cb (MidoriBrowser      *browser,
++                                 GtkWidget          *view,
++                                 MidoriExtension    *extension)
++{
++    g_signal_connect (view, "key_press_event",
++            G_CALLBACK (tab_selector_handle_events), browser);
++    g_signal_connect (view, "key_release_event",
++            G_CALLBACK (tab_selector_handle_events), browser);
++
++    GList *list = g_object_get_data(G_OBJECT(browser), "tab_selector_list");
++    list = g_list_append(list, view);
++    g_object_set_data(G_OBJECT(browser), "tab_selector_list", list);
++}
++
++static void
++tab_selector_browser_remove_tab_cb (MidoriBrowser      *browser,
++                                    GtkWidget          *view,
++                                    MidoriExtension    *extension)
++{
++    GList *list = g_object_get_data(G_OBJECT(browser), "tab_selector_list");
++    list = g_list_remove(list, view);
++    g_object_set_data(G_OBJECT(browser), "tab_selector_list", list);
++}
++
++static void
++tab_selector_disconnect_tab_cb (GtkWidget     *view,
++                                MidoriBrowser *browser)
++{
++    g_signal_handlers_disconnect_by_func (
++        view, tab_selector_handle_events, browser);
++}
++
++static void
++tab_selector_app_add_browser_cb (MidoriApp       *app,
++                                 MidoriBrowser   *browser,
++                                 MidoriExtension *extension)
++{
++    GtkWidget *navigationbar, *notebook;
++
++    g_object_set_data(G_OBJECT(browser), "tab_selector_list", NULL);
++
++    g_signal_connect (browser, "add-tab",
++        G_CALLBACK (tab_selector_browser_add_tab_cb), extension);
++    g_signal_connect (browser, "remove-tab",
++        G_CALLBACK (tab_selector_browser_remove_tab_cb), extension);
++
++    navigationbar = katze_object_get_object(browser, "navigationbar");
++    g_signal_connect (navigationbar, "key_press_event",
++            G_CALLBACK (tab_selector_handle_events), browser);
++    g_signal_connect (navigationbar, "key_release_event",
++            G_CALLBACK (tab_selector_handle_events), browser);
++    g_object_unref(navigationbar);
++
++    notebook = katze_object_get_object(browser, "notebook");
++    g_signal_connect_after (notebook, "switch-page",
++            G_CALLBACK (tab_selector_switch_page), browser);
++    g_object_unref(notebook);
++}
++
++static void
++tab_selector_app_remove_browser_cb (MidoriApp       *app,
++                                    MidoriBrowser   *browser,
++                                    MidoriExtension *extension)
++{
++    GList *list = g_object_get_data (G_OBJECT (browser), "tab_selector_list");
++    g_list_free (list);
++}
++
++static void
++tab_selector_disconnect_browser_cb (MidoriApp       *app,
++                                    MidoriBrowser   *browser,
++                                    MidoriExtension *extension)
++{
++    GtkWidget *navigationbar, *notebook;
++
++    midori_browser_foreach (browser,
++        (GtkCallback)tab_selector_disconnect_tab_cb, browser);
++
++    g_signal_handlers_disconnect_by_func (
++        browser, tab_selector_browser_add_tab_cb, extension);
++    g_signal_handlers_disconnect_by_func (
++        browser, tab_selector_browser_remove_tab_cb, extension);
++    g_signal_handlers_disconnect_by_func (
++        katze_object_get_object (browser, "navigationbar"),
++        tab_selector_handle_events, browser);
++
++    navigationbar = katze_object_get_object (browser, "navigationbar");
++    g_signal_handlers_disconnect_by_func (navigationbar,
++            tab_selector_handle_events, browser);
++    g_signal_handlers_disconnect_by_func (navigationbar,
++            tab_selector_handle_events, browser);
++    g_object_unref (navigationbar);
++
++    notebook = katze_object_get_object (browser, "notebook");
++    g_signal_handlers_disconnect_by_func (notebook,
++            tab_selector_switch_page, browser);
++    g_object_unref (notebook);
++}
++
++static void
++tab_selector_activate_cb (MidoriExtension   *extension,
++                          MidoriApp         *app)
++{
++    GtkWidget *view;
++    KatzeArray *browsers;
++    MidoriBrowser *browser;
++    guint i, j;
++
++    browsers = katze_object_get_object (app, "browsers");
++    i = 0;
++    while ((browser = katze_array_get_nth_item (browsers, i++))) {
++        j = 0;
++        tab_selector_app_add_browser_cb (app, browser, extension);
++        while((view = midori_browser_get_nth_tab(browser, j++)))
++            tab_selector_browser_add_tab_cb(browser, view, extension);
++    }
++    g_object_unref (browsers);
++    g_signal_connect (app, "add-browser",
++        G_CALLBACK (tab_selector_app_add_browser_cb), extension);
++    g_signal_connect (app, "remove-browser",
++        G_CALLBACK (tab_selector_app_remove_browser_cb), extension);
++}
++
++static void
++tab_selector_deactivate_cb (MidoriExtension *extension,
++                            GtkWidget *foo)
++{
++    MidoriApp* app = midori_extension_get_app (extension);
++    KatzeArray *browsers;
++    MidoriBrowser *browser;
++    guint i;
++
++    g_signal_handlers_disconnect_by_func (
++        app, tab_selector_app_add_browser_cb, extension);
++    g_signal_handlers_disconnect_by_func (
++        app, tab_selector_app_remove_browser_cb, extension);
++
++    browsers = katze_object_get_object (app, "browsers");
++    i = 0;
++    while ((browser = katze_array_get_nth_item (browsers, i++)))
++        tab_selector_disconnect_browser_cb (app, browser, extension);
++    g_object_unref (browsers);
++}
++
++MidoriExtension*
++extension_init (void)
++{
++    MidoriExtension *extension = g_object_new (MIDORI_TYPE_EXTENSION,
++        "name", _("Tab History List"),
++        "description", _("Allows to switch tabs by choosing from a "
++                         "list sorted by last usage"),
++        "version", "0.1",
++        "authors", "André Stösel <Midori-Plugin@PyIT.de>",
++        NULL);
++
++    g_signal_connect (extension, "activate",
++        G_CALLBACK (tab_selector_activate_cb), NULL);
++    g_signal_connect (extension, "deactivate",
++        G_CALLBACK (tab_selector_deactivate_cb), NULL);
++
++    midori_extension_install_boolean (extension, "ShowTabInBackground", FALSE);
++    midori_extension_install_integer (extension, "TitleColumnWidth", 300);
++    midori_extension_install_integer (extension, "TabPreviewWidth", 200);
++    midori_extension_install_integer (extension, "TabPreviewHeight", 200);
++    thisExtension = extension;
++    switchEvent = TRUE;
++
++    return extension;
++}
++
index 3d526d8c3291cac4ed4787b5f92c0471c553713f..5322be7be0ec2a17e72b4719bb32e2847088d0eb 100644 (file)
@@ -1,3 +1,4 @@
 fix-serial-build
 default-homepage
 add-debian-searches
+debian-changes-0.2.7-1.1