summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@canonical.com>2013-09-05 10:50:06 +0200
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2013-09-05 10:52:09 +0200
commit13badfb5ccd296faf480b19b2b33f7633f4085c5 (patch)
tree5db182786a27065de0902846c099a0fb6fb1d243 /vcl
parent43b84bbba2519686eb6b0463f422bf695d2d74b9 (diff)
lp#1204592: activate menues even earlier to reduce latency
Change-Id: I54dc06c1bcd708fb666813ec2d0ca79acba361a0
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/unx/gtk/gtkframe.hxx4
-rw-r--r--vcl/unx/gtk/window/gloactiongroup.cxx8
-rw-r--r--vcl/unx/gtk/window/gtksalframe.cxx14
3 files changed, 26 insertions, 0 deletions
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index cce16aba1daa..c2bb187ca6c2 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -219,6 +219,10 @@ class GtkSalFrame : public SalFrame
SalMenu* m_pSalMenu;
#if defined(ENABLE_DBUS) && defined(ENABLE_GIO)
+ public:
+ void EnsureDbusMenuSynced();
+ private:
+ SalMenu* m_pLastSyncedDbusMenu;
friend void ensure_dbus_setup(GdkWindow* gdkWindow, GtkSalFrame* pSalFrame);
friend void on_registrar_available (GDBusConnection*, const gchar*, const gchar*, gpointer);
friend void on_registrar_unavailable (GDBusConnection*, const gchar*, gpointer);
diff --git a/vcl/unx/gtk/window/gloactiongroup.cxx b/vcl/unx/gtk/window/gloactiongroup.cxx
index 78fecf09f9b1..19187a69e793 100644
--- a/vcl/unx/gtk/window/gloactiongroup.cxx
+++ b/vcl/unx/gtk/window/gloactiongroup.cxx
@@ -144,8 +144,15 @@ g_lo_action_group_query_action (GActionGroup *group,
if (action == NULL)
return FALSE;
+
if (enabled)
+ {
+ GtkSalFrame* pFrame = lo_group->priv->frame;
+ if (pFrame) {
+ pFrame->EnsureDbusMenuSynced();
+ }
*enabled = action->enabled;
+ }
if (parameter_type)
*parameter_type = action->parameter_type;
@@ -193,6 +200,7 @@ g_lo_action_group_change_state (GActionGroup *group,
const gchar *action_name,
GVariant *value)
{
+ SAL_INFO("vcl.unity", "g_lo_action_group_change_state on " << group );
g_return_if_fail (value != NULL);
g_variant_ref_sink (value);
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
index 8eda04ae6df9..ac646281cb31 100644
--- a/vcl/unx/gtk/window/gtksalframe.cxx
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
@@ -489,6 +489,9 @@ GtkSalFrame::GtkSalFrame( SystemParentData* pSysData )
GetGenericData()->ErrorTrapPush();
m_bDefaultPos = true;
m_bDefaultSize = true;
+#if defined(ENABLE_DBUS) && defined(ENABLE_GIO)
+ m_pLastSyncedDbusMenu = NULL;
+#endif
Init( pSysData );
}
@@ -528,6 +531,17 @@ static void ObjectDestroyedNotify( gpointer data )
}
}
+#if defined(ENABLE_DBUS) && defined(ENABLE_GIO)
+void GtkSalFrame::EnsureDbusMenuSynced()
+{
+ GtkSalMenu* pSalMenu = static_cast<GtkSalMenu*>(GetMenu());
+ if(m_pLastSyncedDbusMenu != pSalMenu) {
+ m_pLastSyncedDbusMenu = pSalMenu;
+ static_cast<GtkSalMenu*>(pSalMenu)->Activate();
+ }
+}
+#endif
+
static void hud_activated( gboolean hud_active, gpointer user_data )
{
if ( hud_active )