diff options
author | Samuli Suominen <ssuominen@gentoo.org> | 2009-09-23 10:12:32 +0000 |
---|---|---|
committer | Samuli Suominen <ssuominen@gentoo.org> | 2009-09-23 10:12:32 +0000 |
commit | 6c7b26c1f52d9cb71ae6f5ba03d7f8fa408dfa4b (patch) | |
tree | 3090e08a89d637379463848610813d07326648df /xfce-base/xfce4-settings | |
parent | remove spurious mask for app-portage/g-ctan live ebuild (diff) | |
download | gentoo-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/xfce4-settings')
-rw-r--r-- | xfce-base/xfce4-settings/ChangeLog | 11 | ||||
-rw-r--r-- | xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-keyrepeat-typo.patch | 13 | ||||
-rw-r--r-- | xfce-base/xfce4-settings/files/xfce4-settings-4.6.1-fix-timeout-startup.patch | 213 | ||||
-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" ) } |