summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuli Suominen <ssuominen@gentoo.org>2009-09-23 10:12:32 +0000
committerSamuli Suominen <ssuominen@gentoo.org>2009-09-23 10:12:32 +0000
commit6c7b26c1f52d9cb71ae6f5ba03d7f8fa408dfa4b (patch)
tree3090e08a89d637379463848610813d07326648df /xfce-base
parentremove spurious mask for app-portage/g-ctan live ebuild (diff)
downloadgentoo-2-6c7b26c1f52d9cb71ae6f5ba03d7f8fa408dfa4b.tar.gz
gentoo-2-6c7b26c1f52d9cb71ae6f5ba03d7f8fa408dfa4b.tar.bz2
gentoo-2-6c7b26c1f52d9cb71ae6f5ba03d7f8fa408dfa4b.zip
Fix slow session loading wrt #285100, thanks to Peter Volkov for reporting. Fix typo in KeyRepeat code wrt Debian #527238.
(Portage version: 2.2_rc41/cvs/Linux x86_64)
Diffstat (limited to 'xfce-base')
-rw-r--r--xfce-base/xfce4-settings/ChangeLog11
-rw-r--r--xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-keyrepeat-typo.patch13
-rw-r--r--xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-timeout-startup.patch213
-rw-r--r--xfce-base/xfce4-settings/xfce4-settings-4.6.1-r2.ebuild (renamed from xfce-base/xfce4-settings/xfce4-settings-4.6.1-r1.ebuild)6
4 files changed, 240 insertions, 3 deletions
diff --git a/xfce-base/xfce4-settings/ChangeLog b/xfce-base/xfce4-settings/ChangeLog
index e42449fe39e2..5efff6805049 100644
--- a/xfce-base/xfce4-settings/ChangeLog
+++ b/xfce-base/xfce4-settings/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for xfce-base/xfce4-settings
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/xfce-base/xfce4-settings/ChangeLog,v 1.17 2009/08/23 15:37:19 ssuominen Exp $
+# $Header: /var/cvsroot/gentoo-x86/xfce-base/xfce4-settings/ChangeLog,v 1.18 2009/09/23 10:12:32 ssuominen Exp $
+
+*xfce4-settings-4.6.1-r2 (23 Sep 2009)
+
+ 23 Sep 2009; Samuli Suominen <ssuominen@gentoo.org>
+ +xfce4-settings-4.6.1-r2.ebuild,
+ +files/xfce4-settings-4.6.1-fix-keyrepeat-typo.patch,
+ +files/xfce4-settings-4.6.1-fix-timeout-startup.patch:
+ Fix slow session loading wrt #285100, thanks to Peter Volkov for
+ reporting. Fix typo in KeyRepeat code wrt Debian #527238.
23 Aug 2009; Samuli Suominen <ssuominen@gentoo.org>
xfce4-settings-4.6.1.ebuild:
diff --git a/xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-keyrepeat-typo.patch b/xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-keyrepeat-typo.patch
new file mode 100644
index 000000000000..bda6f5392b94
--- /dev/null
+++ b/xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-keyrepeat-typo.patch
@@ -0,0 +1,13 @@
+diff --git a/dialogs/keyboard-settings/xfce-keyboard-settings.c b/dialogs/keyboard-settings/xfce-keyboard-settings.c
+index d372ee9..d1cb69c 100644
+--- a/dialogs/keyboard-settings/xfce-keyboard-settings.c
++++ b/dialogs/keyboard-settings/xfce-keyboard-settings.c
+@@ -322,7 +322,7 @@ xfce_keyboard_settings_constructed (GObject *object)
+ xfconf_g_property_bind (settings->priv->keyboards_channel, "/Default/KeyRepeat/Rate", G_TYPE_INT, G_OBJECT (xkb_key_repeat_rate_scale), "value");
+
+ xkb_key_repeat_delay_scale = gtk_range_get_adjustment (GTK_RANGE (glade_xml_get_widget (settings->priv->glade_xml, "xkb_key_repeat_delay_scale")));
+- xfconf_g_property_bind (settings->priv->keyboards_channel, "/DefaultKeyRepeat/Delay", G_TYPE_INT, G_OBJECT (xkb_key_repeat_delay_scale), "value");
++ xfconf_g_property_bind (settings->priv->keyboards_channel, "/Default/KeyRepeat/Delay", G_TYPE_INT, G_OBJECT (xkb_key_repeat_delay_scale), "value");
+
+ /* XSETTINGS */
+ net_cursor_blink_check = glade_xml_get_widget (settings->priv->glade_xml, "net_cursor_blink_check");
diff --git a/xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-timeout-startup.patch b/xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-timeout-startup.patch
new file mode 100644
index 000000000000..c65722b1e67b
--- /dev/null
+++ b/xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-timeout-startup.patch
@@ -0,0 +1,213 @@
+commit fa550da4a52172b4074922a2962c44613e96e3f0
+Author: kelnos <kelnos@a0aa69c2-05f4-0310-b83c-d5d913b14636>
+Date: Thu Jun 4 09:19:51 2009 +0000
+
+ avoid timing out xfce4-session on startup (bug 5040)
+
+ xfce4-settings-helper was trying to be clever to migrate itself from
+ autostart to the actual session. it was doing a poor job. this should
+ keep the cleverness, but make sure it always connects to the session
+ manager and makes sure the SM can continue. it also allows the copy of
+ x-s-h that was started via the session (and not autostart) to force
+ itself to start, even if it's already running. the other instance will
+ lose its hold on the selection, notice, and quit.
+
+ git-svn-id: http://svn.xfce.org/svn/xfce/xfce4-settings/trunk@29991 a0aa69c2-05f4-0310-b83c-d5d913b14636
+
+diff --git a/xfce4-settings-helper/main.c b/xfce4-settings-helper/main.c
+index c0e7712..1553c58 100644
+--- a/xfce4-settings-helper/main.c
++++ b/xfce4-settings-helper/main.c
+@@ -60,7 +60,14 @@
+ #include "displays.h"
+ #endif
+
++#define SELECTION_NAME "_XFCE_SETTINGS_HELPER"
+
++static GdkFilterReturn xfce_settings_helper_selection_watcher (GdkXEvent *xevt,
++ GdkEvent *evt,
++ gpointer user_data);
++
++
++static SessionClient *sm_client = NULL;
+
+ static gboolean opt_version = FALSE;
+ static gboolean opt_debug = FALSE;
+@@ -124,15 +131,14 @@ xfce_settings_helper_set_autostart_enabled (gboolean enabled)
+ }
+
+
+-/* returns TRUE if we're now connected to the SM, FALSE otherwise */
++/* returns TRUE if we got started by the SM and our client ID was
++ * valid, FALSE otherwise */
+ static gboolean
+ xfce_settings_helper_connect_session (int argc,
+ char **argv,
+ const gchar *sm_client_id,
+ gboolean debug_mode)
+ {
+- SessionClient *sm_client;
+-
+ /* we can't be sure that the SM will save the session later, so we only
+ * disable the autostart item if we're launching because we got *resumed*
+ * from a previous session. */
+@@ -148,69 +154,96 @@ xfce_settings_helper_connect_session (int argc,
+ {
+ g_warning ("Failed to connect to session manager");
+ client_session_free (sm_client);
+- xfce_settings_helper_set_autostart_enabled (TRUE);
++ sm_client = NULL;
+ return FALSE;
+ }
+
+ if (sm_client_id && !g_ascii_strcasecmp (sm_client_id, sm_client->given_client_id))
+ {
+ /* we passed a client id, and got the same one back, which means
+- * we were definitely restarted as a part of the session. so
+- * it's safe to disable the autostart item. */
+- xfce_settings_helper_set_autostart_enabled (FALSE);
++ * we were definitely restarted as a part of the session. */
+ return TRUE;
+ }
+
+- /* otherwise, let's just ensure the autostart item is enabled. */
+- xfce_settings_helper_set_autostart_enabled (TRUE);
+-
+- return TRUE;
++ return FALSE;
+ }
+
+
++#ifdef GDK_WINDOWING_X11
++static GdkFilterReturn
++xfce_settings_helper_selection_watcher (GdkXEvent *xevt,
++ GdkEvent *evt,
++ gpointer user_data)
++{
++ Window xwin = GPOINTER_TO_UINT(user_data);
++ XEvent *xe = (XEvent *)xevt;
++
++ if (xe->type == SelectionClear && xe->xclient.window == xwin)
++ {
++ if (sm_client)
++ client_session_set_restart_style (sm_client, SESSION_RESTART_IF_RUNNING);
++ signal_handler (SIGINT, NULL);
++ }
++
++ return GDK_FILTER_CONTINUE;
++}
++#endif
++
+ static gboolean
+-xfce_settings_helper_acquire_selection ()
++xfce_settings_helper_acquire_selection (gboolean force)
+ {
+ #ifdef GDK_WINDOWING_X11
+ GdkDisplay *gdpy = gdk_display_get_default ();
++ GtkWidget *invisible;
+ Display *dpy = GDK_DISPLAY_XDISPLAY (gdpy);
+ GdkWindow *rootwin = gdk_screen_get_root_window (gdk_display_get_screen (gdpy, 0));
+ Window xroot = GDK_WINDOW_XID (rootwin);
+- Window xwin;
+- Atom selection_atom, manager_atom;
++ GdkAtom selection_atom;
++ Atom selection_atom_x11;
+ XClientMessageEvent xev;
+
+- xwin = XCreateSimpleWindow (dpy, xroot, -100, -100, 1, 1, 0, 0,
+- XBlackPixel (GDK_DISPLAY (), 0));
+- XSelectInput (dpy, xwin, PropertyChangeMask | StructureNotifyMask);
++ selection_atom = gdk_atom_intern (SELECTION_NAME, FALSE);
++ selection_atom_x11 = gdk_x11_atom_to_xatom_for_display (gdpy, selection_atom);
++
++ /* can't use gdk for the selection owner here because it returns NULL
++ * if the selection owner is in another process */
++ if (!force && XGetSelectionOwner (dpy, selection_atom_x11) != None)
++ return FALSE;
+
+- selection_atom = XInternAtom (dpy, "_XFCE_SETTINGS_HELPER", False);
+- manager_atom = XInternAtom (dpy, "MANAGER", False);
++ invisible = gtk_invisible_new ();
++ gtk_widget_realize (invisible);
++ gtk_widget_add_events (invisible, GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK);
+
+- if (XGetSelectionOwner (dpy, selection_atom) != None)
++ if (!gdk_selection_owner_set_for_display (gdpy, invisible->window,
++ selection_atom, GDK_CURRENT_TIME,
++ TRUE))
+ {
+- XDestroyWindow (dpy, xwin);
++ g_critical ("Unable to get selection " SELECTION_NAME);
++ gtk_widget_destroy (invisible);
+ return FALSE;
+ }
+
+- XSetSelectionOwner (dpy, selection_atom, xwin, CurrentTime);
+-
+- if (XGetSelectionOwner (dpy, selection_atom) != xwin)
++ /* but we can use gdk here since we only care if it's our window */
++ if (gdk_selection_owner_get_for_display (gdpy, selection_atom) != invisible->window)
+ {
+- XDestroyWindow (dpy, xwin);
++ gtk_widget_destroy (invisible);
+ return FALSE;
+ }
+
+ xev.type = ClientMessage;
+ xev.window = xroot;
+- xev.message_type = manager_atom;
++ xev.message_type = gdk_x11_get_xatom_by_name_for_display (gdpy, "MANAGER");
+ xev.format = 32;
+ xev.data.l[0] = CurrentTime;
+- xev.data.l[1] = selection_atom;
+- xev.data.l[2] = xwin;
++ xev.data.l[1] = selection_atom_x11;
++ xev.data.l[2] = GDK_WINDOW_XID (invisible->window);
+ xev.data.l[3] = xev.data.l[4] = 0;
+
+ XSendEvent (dpy, xroot, False, StructureNotifyMask, (XEvent *)&xev);
++
++ gdk_window_add_filter (invisible->window,
++ xfce_settings_helper_selection_watcher,
++ GUINT_TO_POINTER (GDK_WINDOW_XID (invisible->window)));
+ #endif
+
+ return TRUE;
+@@ -221,6 +254,7 @@ gint
+ main (gint argc, gchar **argv)
+ {
+ GError *error = NULL;
++ gboolean in_session;
+ GObject *pointer_helper;
+ GObject *keyboards_helper;
+ GObject *accessibility_helper;
+@@ -284,12 +318,19 @@ main (gint argc, gchar **argv)
+ return EXIT_FAILURE;
+ }
+
+- if (!xfce_settings_helper_acquire_selection ())
++ /* connect to session always, even if we quit below. this way the
++ * session manager won't wait for us to time out. */
++ in_session = xfce_settings_helper_connect_session (argc, argv, opt_sm_client_id, opt_debug);
++
++ if (!xfce_settings_helper_acquire_selection (in_session))
+ {
+ g_printerr ("%s is already running\n", G_LOG_DOMAIN);
+ return EXIT_FAILURE;
+ }
+
++ /* if we were restarted as part of the session, remove us from autostart */
++ xfce_settings_helper_set_autostart_enabled (!in_session);
++
+ /* daemonize the process when not running in debug mode */
+ if (!opt_debug)
+ {
+@@ -308,8 +349,6 @@ main (gint argc, gchar **argv)
+ }
+ }
+
+- xfce_settings_helper_connect_session (argc, argv, opt_sm_client_id, opt_debug);
+-
+ /* create the sub daemons */
+ pointer_helper = g_object_new (XFCE_TYPE_POINTERS_HELPER, NULL);
+ keyboards_helper = g_object_new (XFCE_TYPE_KEYBOARDS_HELPER, NULL);
diff --git a/xfce-base/xfce4-settings/xfce4-settings-4.6.1-r1.ebuild b/xfce-base/xfce4-settings/xfce4-settings-4.6.1-r2.ebuild
index 5b086996d310..fa537ec1fbb1 100644
--- a/xfce-base/xfce4-settings/xfce4-settings-4.6.1-r1.ebuild
+++ b/xfce-base/xfce4-settings/xfce4-settings-4.6.1-r2.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/xfce-base/xfce4-settings/xfce4-settings-4.6.1-r1.ebuild,v 1.3 2009/08/23 17:45:19 ssuominen Exp $
+# $Header: /var/cvsroot/gentoo-x86/xfce-base/xfce4-settings/xfce4-settings-4.6.1-r2.ebuild,v 1.1 2009/09/23 10:12:32 ssuominen Exp $
EAPI=2
inherit xfconf
@@ -47,5 +47,7 @@ pkg_setup() {
$(use_enable sound sound-settings)
$(use_enable debug)"
DOCS="AUTHORS ChangeLog NEWS TODO"
- PATCHES=( "${FILESDIR}/${P}-libxklavier.patch" )
+ PATCHES=( "${FILESDIR}/${P}-libxklavier.patch"
+ "${FILESDIR}/${P}-fix-timeout-startup.patch"
+ "${FILESDIR}/${P}-fix-keyrepeat-typo.patch" )
}