[Xfce4-commits] <midori:master> Re-implement block-uris and inactivity-reset as settings

Christian Dywan noreply at xfce.org
Sun Nov 25 12:06:05 CET 2012


Updating branch refs/heads/master
         to bb89ba3c8c0e7beea2fa8841600fb9c337f77b96 (commit)
       from ad05b70604091fa410b2e5b96dff7c0d0159e756 (commit)

commit bb89ba3c8c0e7beea2fa8841600fb9c337f77b96
Author: Christian Dywan <christian at twotoasts.de>
Date:   Fri Nov 23 22:17:14 2012 +0100

    Re-implement block-uris and inactivity-reset as settings
    
    Both can now be used without a custom command line and
    in all runtime modes.

 midori/main.c               |  119 +++---------------------------------------
 midori/midori-browser.c     |   72 ++++++++++++++++++++++++++
 midori/midori-browser.h     |    4 ++
 midori/midori-settings.vala |   21 ++++++++
 midori/midori-websettings.c |    2 +-
 5 files changed, 107 insertions(+), 111 deletions(-)

diff --git a/midori/main.c b/midori/main.c
index ec2a410..6d1c69f 100644
--- a/midori/main.c
+++ b/midori/main.c
@@ -46,13 +46,6 @@
     #include <signal.h>
 #endif
 
-#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
-    #include <X11/Xlib.h>
-    #include <X11/Xutil.h>
-    #include <X11/extensions/scrnsaver.h>
-    #include <gdk/gdkx.h>
-#endif
-
 static void
 midori_history_clear_cb (KatzeArray* array,
                          sqlite3*    db)
@@ -948,94 +941,6 @@ signal_handler (int signal_id)
 }
 #endif
 
-static void
-midori_soup_session_block_uris_cb (SoupSession* session,
-                                   SoupMessage* msg,
-                                   gchar*       blocked_uris)
-{
-    static GRegex* regex = NULL;
-    SoupURI* soup_uri;
-    gchar* uri;
-    if (!regex)
-        regex = g_regex_new (blocked_uris, 0, 0, NULL);
-    soup_uri = soup_message_get_uri (msg);
-    uri = soup_uri_to_string (soup_uri, FALSE);
-    if (g_regex_match (regex, uri, 0, 0))
-    {
-        soup_uri = soup_uri_new ("http://.invalid");
-        soup_message_set_uri (msg, soup_uri);
-        soup_uri_free (soup_uri);
-    }
-    g_free (uri);
-}
-
-typedef struct {
-     MidoriBrowser* browser;
-     guint timeout;
-     gchar* uri;
-} MidoriInactivityTimeout;
-
-static gboolean
-midori_inactivity_timeout (gpointer data)
-{
-    #ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
-    MidoriInactivityTimeout* mit = data;
-    static Display* xdisplay = NULL;
-    static XScreenSaverInfo* mit_info = NULL;
-    static int has_extension = -1;
-    int event_base, error_base;
-
-    if (has_extension == -1)
-    {
-        GdkDisplay* display = gtk_widget_get_display (GTK_WIDGET (mit->browser));
-        if (GDK_IS_X11_DISPLAY (display))
-        {
-            xdisplay = GDK_DISPLAY_XDISPLAY (display);
-            has_extension = XScreenSaverQueryExtension (xdisplay,
-                                                        &event_base, &error_base);
-        }
-        else
-        {
-            has_extension = 0;
-        }
-    }
-
-    if (has_extension)
-    {
-        if (!mit_info)
-            mit_info = XScreenSaverAllocInfo ();
-
-        XScreenSaverQueryInfo (xdisplay, RootWindow (xdisplay, 0), mit_info);
-        if (mit_info->idle / 1000 > mit->timeout)
-        {
-            GtkWidget* view;
-            midori_browser_set_current_uri (mit->browser, mit->uri);
-            midori_private_data_clear_all (mit->browser);
-        }
-    }
-    #else
-    /* TODO: Implement for other windowing systems */
-    #endif
-
-    return TRUE;
-}
-
-static void
-midori_setup_inactivity_reset (MidoriBrowser* browser,
-                               gint           inactivity_reset,
-                               const gchar*   uri)
-{
-    if (inactivity_reset > 0)
-    {
-        MidoriInactivityTimeout* mit = g_new (MidoriInactivityTimeout, 1);
-        mit->browser = browser;
-        mit->timeout = inactivity_reset;
-        mit->uri = g_strdup (uri);
-        g_timeout_add_seconds (inactivity_reset, midori_inactivity_timeout,
-                               mit);
-    }
-}
-
 int
 main (int    argc,
       char** argv)
@@ -1372,10 +1277,6 @@ main (int    argc,
         }
 
         midori_load_soup_session (settings);
-        if (block_uris)
-            g_signal_connect (session, "request-queued",
-                G_CALLBACK (midori_soup_session_block_uris_cb),
-                g_strdup (block_uris));
 
         if (run)
         {
@@ -1436,6 +1337,8 @@ main (int    argc,
 
        g_object_set (settings, "show-panel", FALSE,
                       "last-window-state", MIDORI_WINDOW_NORMAL,
+                      "inactivity-reset", inactivity_reset,
+                      "block-uris", block_uris,
                       NULL);
         midori_browser_set_action_visible (browser, "Panel", FALSE);
         g_object_set (browser, "settings", settings, NULL);
@@ -1472,15 +1375,11 @@ main (int    argc,
         if (midori_browser_get_current_uri (browser) == NULL)
             midori_browser_add_uri (browser, "about:blank");
 
-        midori_setup_inactivity_reset (browser, inactivity_reset, webapp);
         midori_startup_timer ("App created: \t%f");
         gtk_main ();
         return 0;
     }
 
-    /* FIXME: Inactivity reset is only supported for app mode */
-    if (inactivity_reset > 0)
-        g_error ("--inactivity-reset is currently only supported with --app.");
 
     if (portable)
     {
@@ -1522,8 +1421,13 @@ main (int    argc,
     error_messages = g_string_new (NULL);
     error = NULL;
     settings = midori_settings_new_full (&extensions);
-    g_object_set (settings, "enable-developer-extras", TRUE, NULL);
-    g_object_set (settings, "enable-html5-database", TRUE, NULL);
+    g_object_set (settings,
+                  "enable-developer-extras", TRUE,
+                  "enable-html5-database", TRUE,
+                  "block-uris", block_uris,
+                  NULL);
+    if (inactivity_reset > 0)
+        g_object_set (settings, "inactivity-reset", inactivity_reset, NULL);
     midori_startup_timer ("Config and accels read: \t%f");
 
     /* Load search engines */
@@ -1695,11 +1599,6 @@ main (int    argc,
 
     if (execute)
         g_object_set_data (G_OBJECT (app), "execute-command", uris);
-    if (block_uris)
-            g_signal_connect (webkit_get_default_session (), "request-queued",
-                G_CALLBACK (midori_soup_session_block_uris_cb),
-                g_strdup (block_uris));
-
 
     gtk_main ();
 
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 1ad0218..d8f239b 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -62,6 +62,13 @@
 
 #include <sqlite3.h>
 
+#ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
+    #include <X11/Xlib.h>
+    #include <X11/Xutil.h>
+    #include <X11/extensions/scrnsaver.h>
+    #include <gdk/gdkx.h>
+#endif
+
 struct _MidoriBrowser
 {
     #if HAVE_HILDON
@@ -5553,6 +5560,65 @@ static const GtkRadioActionEntry encoding_entries[] =
 };
 static const guint encoding_entries_n = G_N_ELEMENTS (encoding_entries);
 
+typedef struct {
+     MidoriBrowser* browser;
+     guint timeout;
+} MidoriInactivityTimeout;
+
+static gboolean
+midori_inactivity_timeout (gpointer data)
+{
+    #ifdef HAVE_X11_EXTENSIONS_SCRNSAVER_H
+    MidoriInactivityTimeout* mit = data;
+    static Display* xdisplay = NULL;
+    static XScreenSaverInfo* mit_info = NULL;
+    static int has_extension = -1;
+    int event_base, error_base;
+
+    if (has_extension == -1)
+    {
+        GdkDisplay* display = gtk_widget_get_display (GTK_WIDGET (mit->browser));
+        if (GDK_IS_X11_DISPLAY (display))
+        {
+            xdisplay = GDK_DISPLAY_XDISPLAY (display);
+            has_extension = XScreenSaverQueryExtension (xdisplay, &event_base, &error_base);
+        }
+        else
+            has_extension = 0;
+    }
+
+    if (has_extension)
+    {
+        if (!mit_info)
+            mit_info = XScreenSaverAllocInfo ();
+        XScreenSaverQueryInfo (xdisplay, RootWindow (xdisplay, 0), mit_info);
+        if (mit_info->idle / 1000 > mit->timeout)
+        {
+            GtkWidget* view;
+            midori_private_data_clear_all (mit->browser);
+            midori_browser_activate_action (mit->browser, "Homepage");
+        }
+    }
+    #else
+    /* TODO: Implement for other windowing systems */
+    #endif
+
+    return TRUE;
+}
+
+void
+midori_browser_set_inactivity_reset (MidoriBrowser* browser,
+                                     gint           inactivity_reset)
+{
+    if (inactivity_reset > 0)
+    {
+        MidoriInactivityTimeout* mit = g_new (MidoriInactivityTimeout, 1);
+        mit->browser = browser;
+        mit->timeout = inactivity_reset;
+        g_timeout_add_seconds (inactivity_reset, midori_inactivity_timeout, mit);
+    }
+}
+
 static void
 midori_browser_window_state_event_cb (MidoriBrowser*       browser,
                                       GdkEventWindowState* event)
@@ -6841,6 +6907,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
 {
     gboolean remember_last_window_size;
     MidoriWindowState last_window_state;
+    guint inactivity_reset;
     gboolean compact_sidepanel;
     gboolean right_align_sidepanel, open_panels_in_windows;
     gint last_panel_position, last_panel_page;
@@ -6859,6 +6926,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
                   "last-window-width", &browser->last_window_width,
                   "last-window-height", &browser->last_window_height,
                   "last-window-state", &last_window_state,
+                  "inactivity-reset", &inactivity_reset,
                   "compact-sidepanel", &compact_sidepanel,
                   "right-align-sidepanel", &right_align_sidepanel,
                   "open-panels-in-windows", &open_panels_in_windows,
@@ -6887,6 +6955,8 @@ _midori_browser_update_settings (MidoriBrowser* browser)
         midori_speed_dial_set_close_buttons_left (browser->dial,
             katze_object_get_boolean (browser->settings, "close-buttons-left"));
 
+    midori_browser_set_inactivity_reset (browser, inactivity_reset);
+
     if (remember_last_window_size)
     {
         if (browser->last_window_width && browser->last_window_height)
@@ -7030,6 +7100,8 @@ midori_browser_settings_notify (MidoriWebSettings* web_settings,
         midori_speed_dial_set_close_buttons_left (browser->dial,
             katze_object_get_boolean (browser->settings, "close-buttons-left"));
     }
+    else if (name == g_intern_string ("inactivity-reset"))
+        midori_browser_set_inactivity_reset (browser, g_value_get_uint (&value));
     else if (!g_object_class_find_property (G_OBJECT_GET_CLASS (web_settings),
                                              name))
          g_warning (_("Unexpected setting '%s'"), name);
diff --git a/midori/midori-browser.h b/midori/midori-browser.h
index 211d342..5353714 100644
--- a/midori/midori-browser.h
+++ b/midori/midori-browser.h
@@ -194,6 +194,10 @@ midori_browser_save_uri               (MidoriBrowser*     browser,
                                        MidoriView*        view,
                                        const gchar*       uri);
 
+void
+midori_browser_set_inactivity_reset   (MidoriBrowser*     browser,
+                                       gint               inactivity_reset);
+
 G_END_DECLS
 
 #endif /* __MIDORI_BROWSER_H__ */
diff --git a/midori/midori-settings.vala b/midori/midori-settings.vala
index 70d213c..9ed0810 100644
--- a/midori/midori-settings.vala
+++ b/midori/midori-settings.vala
@@ -35,6 +35,27 @@ namespace Midori {
         /* Since: 0.1.3 */
         public WindowState last_window_state { get; set; default = WindowState.NORMAL; }
 
+        /* Since: 0.4.8 */
+        public uint inactivity_reset { get; set; default = 0; }
+
+        GLib.Regex block_uris_regex;
+        /* Since: 0.4.8 */
+        public string? block_uris { get {
+            return block_uris_regex.get_pattern ();
+        } set {
+            if (block_uris_regex == null)
+                WebKit.get_default_session ().request_queued.connect ((msg) => {
+                    if (block_uris_regex.match (msg.uri.to_string (false)))
+                        msg.uri = new Soup.URI ("http://.invalid");
+                });
+            try {
+                block_uris_regex = new GLib.Regex (value);
+            }
+            catch (Error error) {
+                critical ("block-uris: %s", error.message);
+            }
+        } default = null; }
+
         public string? location_entry_search { get; set; default = null; }
         /* Since: 0.1.7 */
         public int clear_private_data { get; set; default = 0; }
diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c
index b1ef0fc..03a0bbf 100644
--- a/midori/midori-websettings.c
+++ b/midori/midori-websettings.c
@@ -1333,7 +1333,7 @@ midori_settings_new_full (gchar*** extensions)
             g_object_set (settings, property, str, NULL);
             g_free (str);
         }
-        else if (type == G_TYPE_PARAM_INT)
+        else if (type == G_TYPE_PARAM_INT || type == G_TYPE_PARAM_UINT)
         {
             integer = g_key_file_get_integer (key_file, "settings", property, NULL);
             g_object_set (settings, property, integer, NULL);


More information about the Xfce4-commits mailing list