summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRay Strode <rstrode@fedoraproject.org>2008-09-26 19:39:13 +0000
committerRay Strode <rstrode@fedoraproject.org>2008-09-26 19:39:13 +0000
commit1034e315b1fa568314f651022ed8084d24bae656 (patch)
tree31e0d930f7cafc1870a5d4d69e5c0c2136476bf1
parentcf899e88f585704157e70c3ff85e8e147801e508 (diff)
downloadgnome-panel-2_24_0-4_fc10.tar.gz
gnome-panel-2_24_0-4_fc10.tar.xz
gnome-panel-2_24_0-4_fc10.zip
- Try to make initial panel slide-in animation be smoothgnome-panel-2_24_0-4_fc10
-rw-r--r--gnome-panel-2.24.0-smoother-slide-in.patch451
-rw-r--r--gnome-panel.spec8
2 files changed, 458 insertions, 1 deletions
diff --git a/gnome-panel-2.24.0-smoother-slide-in.patch b/gnome-panel-2.24.0-smoother-slide-in.patch
new file mode 100644
index 0000000..b0fb4d8
--- /dev/null
+++ b/gnome-panel-2.24.0-smoother-slide-in.patch
@@ -0,0 +1,451 @@
+--- gnome-panel-2.24.0/gnome-panel/applet.c
++++ gnome-panel-2.24.0/gnome-panel/applet.c
+@@ -792,6 +792,7 @@ typedef struct {
+ } PanelAppletToLoad;
+
+ static GSList *panel_applets_to_load = NULL;
++static GSList *panel_applets_loading = NULL;
+ static gboolean panel_applet_have_load_idle = FALSE;
+
+ static void
+@@ -818,8 +819,40 @@ panel_applet_on_load_queue (const char *id)
+ return FALSE;
+ }
+
++static void
++on_applet_loaded (const char *id,
++ gpointer user_data)
++{
++ PanelAppletToLoad *applet;
++ GSList *l, *applet_link;
++
++ GClosure *closure = (GClosure *) user_data;
++
++ applet_link = NULL;
++ for (l = panel_applets_loading; l; l = l->next) {
++ applet = l->data;
++
++ if (strcmp (applet->id, id) == 0) {
++ break;
++ }
++ }
++
++ if (l == NULL)
++ return;
++
++ panel_applets_loading = g_slist_delete_link (panel_applets_loading, l);
++ free_applet_to_load (applet);
++
++ if (panel_applets_loading == NULL && closure != NULL) {
++ GValue param = { 0 };
++ g_value_init (&param, G_TYPE_POINTER);
++ g_value_set_instance (&param, NULL);
++ g_cclosure_marshal_VOID__VOID (closure, NULL, 1, &param, 0, NULL);
++ }
++}
++
+ static gboolean
+-panel_applet_load_idle_handler (gpointer dummy)
++panel_applet_load_idle_handler (GClosure *closure)
+ {
+ PanelAppletToLoad *applet = NULL;
+ PanelToplevel *toplevel = NULL;
+@@ -848,8 +881,8 @@ panel_applet_load_idle_handler (gpointer dummy)
+ panel_applet_have_load_idle = FALSE;
+ return FALSE;
+ }
+-
+ panel_applets_to_load = g_slist_delete_link (panel_applets_to_load, l);
++ panel_applets_loading = g_slist_append (panel_applets_loading, applet);
+
+ panel_widget = panel_toplevel_get_panel_widget (toplevel);
+
+@@ -866,13 +900,16 @@ panel_applet_load_idle_handler (gpointer dummy)
+ panel_widget,
+ applet->locked,
+ applet->position,
+- applet->id);
++ applet->id,
++ on_applet_loaded,
++ closure);
+ break;
+ case PANEL_OBJECT_DRAWER:
+ drawer_load_from_gconf (panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ break;
+ case PANEL_OBJECT_MENU:
+ panel_menu_button_load_from_gconf (panel_widget,
+@@ -880,12 +917,14 @@ panel_applet_load_idle_handler (gpointer dummy)
+ applet->position,
+ TRUE,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ break;
+ case PANEL_OBJECT_LAUNCHER:
+ launcher_load_from_gconf (panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ break;
+ case PANEL_OBJECT_LOGOUT:
+ case PANEL_OBJECT_LOCK:
+@@ -896,6 +935,7 @@ panel_applet_load_idle_handler (gpointer dummy)
+ applet->position,
+ TRUE,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ break;
+ case PANEL_OBJECT_ACTION:
+ panel_action_button_load_from_gconf (
+@@ -904,6 +944,7 @@ panel_applet_load_idle_handler (gpointer dummy)
+ applet->position,
+ TRUE,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ break;
+ case PANEL_OBJECT_MENU_BAR:
+ panel_menu_bar_load_from_gconf (
+@@ -912,18 +953,18 @@ panel_applet_load_idle_handler (gpointer dummy)
+ applet->position,
+ TRUE,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ break;
+ case PANEL_OBJECT_SEPARATOR:
+ panel_separator_load_from_gconf (panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
++ on_applet_loaded (applet->id, closure);
+ default:
+ break;
+ }
+
+- free_applet_to_load (applet);
+-
+ return TRUE;
+ }
+
+@@ -969,8 +1010,11 @@ panel_applet_compare (const PanelAppletToLoad *a,
+ }
+
+ void
+-panel_applet_load_queued_applets (void)
++panel_applet_load_queued_applets (GFunc queue_empty_func,
++ gpointer user_data)
+ {
++ GClosure *closure;
++
+ if (!panel_applets_to_load)
+ return;
+
+@@ -978,7 +1022,11 @@ panel_applet_load_queued_applets (void)
+ (GCompareFunc) panel_applet_compare);
+
+ if ( ! panel_applet_have_load_idle) {
+- g_idle_add (panel_applet_load_idle_handler, NULL);
++ if (queue_empty_func != NULL)
++ closure = g_cclosure_new_swap (G_CALLBACK (queue_empty_func), user_data, NULL);
++ else
++ closure = NULL;
++ g_idle_add ((GSourceFunc) panel_applet_load_idle_handler, closure);
+ panel_applet_have_load_idle = TRUE;
+ }
+ }
+--- gnome-panel-2.24.0/gnome-panel/applet.h
++++ gnome-panel-2.24.0/gnome-panel/applet.h
+@@ -28,6 +28,7 @@ typedef struct {
+ char *id;
+ } AppletInfo;
+
++typedef void (* AppletLoadingDoneFunc) (const char *id, gpointer data);
+ typedef gboolean (* CallbackEnabledFunc) (void);
+
+ typedef struct {
+@@ -69,7 +70,8 @@ void panel_applet_queue_applet_to_load (const char *id,
+ int position,
+ gboolean right_stick,
+ gboolean locked);
+-void panel_applet_load_queued_applets (void);
++void panel_applet_load_queued_applets (GFunc queue_empty_func,
++ gpointer user_data);
+ gboolean panel_applet_on_load_queue (const char *id);
+
+
+--- gnome-panel-2.24.0/gnome-panel/panel-applet-frame.c
++++ gnome-panel-2.24.0/gnome-panel/panel-applet-frame.c
+@@ -80,6 +80,8 @@ typedef struct {
+ int position;
+ gboolean exactpos;
+ char *id;
++ AppletLoadingDoneFunc done_func;
++ gpointer user_data;
+ } PanelAppletFrameActivating;
+
+ /* Keep in sync with panel-applet.h. Uggh.
+@@ -326,7 +328,9 @@ panel_applet_frame_load (const gchar *iid,
+ gboolean locked,
+ int position,
+ gboolean exactpos,
+- const char *id)
++ const char *id,
++ AppletLoadingDoneFunc done_func,
++ gpointer user_data)
+ {
+ PanelAppletFrame *frame;
+ CORBA_Environment ev;
+@@ -337,11 +341,17 @@ panel_applet_frame_load (const gchar *iid,
+ g_return_if_fail (id != NULL);
+
+ if (g_slist_find_custom (no_reload_applets, id,
+- (GCompareFunc) strcmp))
++ (GCompareFunc) strcmp)) {
++ if (done_func)
++ done_func (id, user_data);
+ return;
++ }
+
+- if (panel_lockdown_is_applet_disabled (iid))
++ if (panel_lockdown_is_applet_disabled (iid)) {
++ if (done_func)
++ done_func (id, user_data);
+ return;
++ }
+
+ frame = g_object_new (PANEL_TYPE_APPLET_FRAME, NULL);
+ frame->priv->panel = panel;
+@@ -353,6 +363,8 @@ panel_applet_frame_load (const gchar *iid,
+ frame_act->position = position;
+ frame_act->exactpos = exactpos;
+ frame_act->id = g_strdup (id);
++ frame_act->done_func = done_func;
++ frame_act->user_data = user_data;
+
+ CORBA_exception_init (&ev);
+
+@@ -367,7 +379,9 @@ void
+ panel_applet_frame_load_from_gconf (PanelWidget *panel_widget,
+ gboolean locked,
+ int position,
+- const char *id)
++ const char *id,
++ AppletLoadingDoneFunc done_func,
++ gpointer user_data)
+ {
+ const char *key;
+ char *applet_iid;
+@@ -379,11 +393,14 @@ panel_applet_frame_load_from_gconf (PanelWidget *panel_widget,
+ applet_iid = gconf_client_get_string (panel_gconf_get_client (),
+ key, NULL);
+
+- if (!applet_iid || !applet_iid[0])
++ if (!applet_iid || !applet_iid[0]) {
++ done_func (id, user_data);
+ return;
++ }
+
+ panel_applet_frame_load (applet_iid, panel_widget,
+- locked, position, TRUE, id);
++ locked, position, TRUE, id,
++ done_func, user_data);
+
+ g_free (applet_iid);
+ }
+@@ -890,7 +907,7 @@ panel_applet_frame_reload_response (GtkWidget *dialog,
+ }
+
+ panel_applet_frame_load (iid, panel, locked,
+- position, TRUE, id);
++ position, TRUE, id, NULL, NULL);
+
+ g_free (iid);
+ g_free (id);
+@@ -1286,6 +1303,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ if (!in_default_panel_config (frame_act->id)) {
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ }
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ return;
+@@ -1328,6 +1347,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ CORBA_exception_free (&corba_ev);
+ bonobo_object_release_unref (object, NULL);
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ g_free (error);
+@@ -1344,6 +1365,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ g_warning (G_STRLOC ": failed to load applet %s",
+ frame->priv->iid);
+ panel_applet_frame_loading_failed (frame, frame_act->id);
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ return;
+@@ -1355,6 +1378,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ "(cannot get control frame)", frame->priv->iid);
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ gtk_object_sink (GTK_OBJECT (widget));
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ return;
+@@ -1371,6 +1396,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ frame->priv->iid, error);
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ gtk_object_sink (GTK_OBJECT (widget));
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ g_free (error);
+@@ -1394,6 +1421,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ frame->priv->iid, error);
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ gtk_object_sink (GTK_OBJECT (widget));
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ g_free (error);
+@@ -1418,6 +1447,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ "(cannot get control)", frame->priv->iid);
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ gtk_object_sink (GTK_OBJECT (widget));
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ return;
+@@ -1430,6 +1461,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ "(cannot get applet shell)", frame->priv->iid);
+ panel_applet_frame_loading_failed (frame, frame_act->id);
+ gtk_object_sink (GTK_OBJECT (widget));
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ return;
+@@ -1461,6 +1494,8 @@ panel_applet_frame_activated (CORBA_Object object,
+ panel_lockdown_notify_add (G_CALLBACK (panel_applet_frame_sync_menu_state),
+ frame);
+
++ if (frame_act->done_func)
++ frame_act->done_func (frame_act->id, frame_act->user_data);
+ g_free (frame_act->id);
+ g_free (frame_act);
+ }
+--- gnome-panel-2.24.0/gnome-panel/panel-applet-frame.h
++++ gnome-panel-2.24.0/gnome-panel/panel-applet-frame.h
+@@ -73,7 +73,9 @@ void panel_applet_frame_change_background (PanelAppletFrame *frame,
+ void panel_applet_frame_load_from_gconf (PanelWidget *panel_widget,
+ gboolean locked,
+ int position,
+- const char *id);
++ const char *id,
++ AppletLoadingDoneFunc done_func,
++ gpointer user_data);
+
+ void panel_applet_frame_set_panel (PanelAppletFrame *frame,
+ PanelWidget *panel);
+--- gnome-panel-2.24.0/gnome-panel/panel-profile.c
++++ gnome-panel-2.24.0/gnome-panel/panel-profile.c
+@@ -2195,7 +2195,7 @@ panel_profile_object_id_list_notify (GConfClient *client,
+ g_slist_free (sublist);
+ g_slist_free (object_ids);
+
+- panel_applet_load_queued_applets ();
++ panel_applet_load_queued_applets (NULL, NULL);
+ }
+
+ static void
+@@ -2446,6 +2446,22 @@ panel_profile_ensure_toplevel_per_screen (GConfClient *client,
+ g_slist_free (empty_screens);
+ }
+
++static void
++panel_profile_on_loaded (void)
++{
++ GSList *toplevels;
++ GSList *l;
++
++ toplevels = panel_toplevel_list_toplevels ();
++
++ for (l = toplevels; l; l = l->next) {
++ PanelToplevel *toplevel;
++
++ toplevel = PANEL_TOPLEVEL (l->data);
++ panel_toplevel_queue_initial_unhide (toplevel);
++ }
++}
++
+ void
+ panel_profile_load (void)
+ {
+@@ -2477,7 +2493,7 @@ panel_profile_load (void)
+
+ panel_profile_ensure_toplevel_per_screen (client, PANEL_CONFIG_DIR);
+
+- panel_applet_load_queued_applets ();
++ panel_applet_load_queued_applets ((GFunc) panel_profile_on_loaded, NULL);
+ }
+
+ static gboolean
+--- gnome-panel-2.24.0/gnome-panel/panel-toplevel.c
++++ gnome-panel-2.24.0/gnome-panel/panel-toplevel.c
+@@ -2898,12 +2899,15 @@ static void
+ panel_toplevel_initially_hide (PanelToplevel *toplevel)
+ {
+ if (!toplevel->priv->attached) {
++
++ /* We start the panel off hidden until all the
++ * applets are loaded, and then finally slide it
++ * down when it's ready to be used
++ */
+ toplevel->priv->initial_animation_done = FALSE;
+
+ toplevel->priv->state = PANEL_STATE_AUTO_HIDDEN;
+ gtk_widget_queue_resize (GTK_WIDGET (toplevel));
+-
+- panel_toplevel_queue_auto_unhide (toplevel);
+ } else
+ toplevel->priv->initial_animation_done = TRUE;
+
+@@ -3638,6 +3642,17 @@ panel_toplevel_queue_auto_unhide (PanelToplevel *toplevel)
+ toplevel);
+ }
+
++void
++panel_toplevel_queue_initial_unhide (PanelToplevel *toplevel)
++{
++ if (toplevel->priv->initial_animation_done)
++ return;
++ /* Give the applets a second or so to frob after registering */
++ toplevel->priv->unhide_timeout =
++ g_timeout_add_seconds (1, (GSourceFunc) panel_toplevel_auto_unhide_timeout_handler,
++ toplevel);
++}
++
+ static gboolean
+ panel_toplevel_enter_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event)
+--- gnome-panel-2.24.0/gnome-panel/panel-toplevel.h
++++ gnome-panel-2.24.0/gnome-panel/panel-toplevel.h
+@@ -136,6 +136,7 @@ void panel_toplevel_hide (PanelToplevel
+ void panel_toplevel_unhide (PanelToplevel *toplevel);
+ void panel_toplevel_queue_auto_hide (PanelToplevel *toplevel);
+ void panel_toplevel_queue_auto_unhide (PanelToplevel *toplevel);
++void panel_toplevel_queue_initial_unhide (PanelToplevel *toplevel);
+ void panel_toplevel_push_autohide_disabler (PanelToplevel *toplevel);
+ void panel_toplevel_pop_autohide_disabler (PanelToplevel *toplevel);
+
diff --git a/gnome-panel.spec b/gnome-panel.spec
index 7462d99..6a61552 100644
--- a/gnome-panel.spec
+++ b/gnome-panel.spec
@@ -23,7 +23,7 @@
Summary: GNOME panel
Name: gnome-panel
Version: 2.24.0
-Release: 3%{?dist}
+Release: 4%{?dist}
URL: http://www.gnome.org
Source0: http://download.gnome.org/sources/gnome-panel/2.24/%{name}-%{version}.tar.bz2
@@ -113,6 +113,8 @@ Patch11: applet-error.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=520111
Patch24: gnome-panel-2.21.92-allow-spurious-view-done-signals.patch
+Patch25: gnome-panel-2.24.0-smoother-slide-in.patch
+
Patch35: clock-wakeups.patch
Conflicts: gnome-power-manager < 2.15.3
@@ -160,6 +162,7 @@ Panel Applets using the libpanel-applet library.
%patch10 -p1 -b .preferred-apps
%patch11 -p1 -b .applet-error
%patch24 -p1 -b .allow-spurious-view-done-signals
+%patch25 -p1 -b .smoother-slide-in
%patch35 -p1 -b .clock-wakeups
. %{SOURCE6}
@@ -360,6 +363,9 @@ fi
%{_datadir}/gtk-doc/html/*
%changelog
+* Fri Sep 26 2008 Ray Strode <rstrode@redhat.com> - 2.24.0-4
+- Try to make initial panel slide-in animation be smooth
+
* Thu Sep 25 2008 Matthias Clasen <mclasen@redhat.com> - 2.24.0-3
- Save some space