[Xfce4-commits] [xfce/xfwm4] 01/01: compositor: Use settings for vblank mode
noreply at xfce.org
noreply at xfce.org
Sun Dec 9 19:19:35 CET 2018
This is an automated email from the git hooks/post-receive script.
o l i v i e r p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository xfce/xfwm4.
commit 27238064f229fd4ecd9932ac52de46776fa1c7de
Author: Olivier Fourdan <fourdan at xfce.org>
Date: Sun Dec 9 19:08:13 2018 +0100
compositor: Use settings for vblank mode
Remove the command line options “--vblank” which is not flexible enough
and use xfconf/settings in place.
This requires restarting xfwm4 after changing the value though, for the
change to take effect (vblank option is applied only at startup).
Signed-off-by: Olivier Fourdan <fourdan at xfce.org>
---
defaults/defaults | 1 +
src/compositor.c | 34 +++++++++++++++++++++++++++++-----
src/compositor.h | 10 ++--------
src/display.c | 1 -
src/display.h | 2 --
src/main.c | 47 -----------------------------------------------
src/screen.h | 11 +++++++++++
src/settings.c | 12 +++++++++++-
8 files changed, 54 insertions(+), 64 deletions(-)
diff --git a/defaults/defaults b/defaults/defaults
index 3058073..cf3d870 100644
--- a/defaults/defaults
+++ b/defaults/defaults
@@ -68,6 +68,7 @@ toggle_workspaces=false
unredirect_overlays=true
urgent_blink=false
use_compositing=true
+vblank_mode=auto
workspace_count=4
wrap_cycle=true
wrap_layout=true
diff --git a/src/compositor.c b/src/compositor.c
index 8126455..1b09a59 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -4392,8 +4392,8 @@ compositorManageScreen (ScreenInfo *screen_info)
#ifdef HAVE_PRESENT_EXTENSION
screen_info->use_present = display_info->have_present &&
- (display_info->vblank_method == VBLANK_AUTO ||
- display_info->vblank_method == VBLANK_XPRESENT);
+ (screen_info->vblank_mode == VBLANK_AUTO ||
+ screen_info->vblank_mode == VBLANK_XPRESENT);
if (screen_info->use_present)
{
screen_info->present_pending = FALSE;
@@ -4410,9 +4410,8 @@ compositorManageScreen (ScreenInfo *screen_info)
#ifdef HAVE_XSYNC
display_info->have_xsync &&
#endif /* HAVE_XSYNC */
- (display_info->vblank_method == VBLANK_AUTO ||
- display_info->vblank_method == VBLANK_GLX);
-
+ (screen_info->vblank_mode == VBLANK_AUTO ||
+ screen_info->vblank_mode == VBLANK_GLX);
if (screen_info->use_glx)
{
screen_info->glx_context = None;
@@ -4792,3 +4791,28 @@ compositorTestServer (DisplayInfo *display_info)
return FALSE;
#endif /* HAVE_COMPOSITOR */
}
+
+vblankMode
+compositorVblankMode (const gchar *vblank_mode)
+{
+#ifdef HAVE_PRESENT_EXTENSION
+ if (g_ascii_strcasecmp (vblank_mode, "xpresent") == 0)
+ {
+ return VBLANK_XPRESENT;
+ }
+ else
+#endif /* HAVE_PRESENT_EXTENSION */
+#ifdef HAVE_EPOXY
+ if (g_ascii_strcasecmp (vblank_mode, "glx") == 0)
+ {
+ return VBLANK_GLX;
+ }
+ else
+#endif /* HAVE_EPOXY */
+ if (g_ascii_strcasecmp (vblank_mode, "off") == 0)
+ {
+ return VBLANK_OFF;
+ }
+
+ return VBLANK_AUTO;
+}
diff --git a/src/compositor.h b/src/compositor.h
index 9212d66..0445fe5 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -34,14 +34,6 @@
#include "screen.h"
#include "client.h"
-enum
-{
- VBLANK_OFF = 0,
- VBLANK_AUTO,
- VBLANK_XPRESENT,
- VBLANK_GLX
-};
-
gboolean compositorIsUsable (DisplayInfo *);
gboolean compositorIsActive (ScreenInfo *);
void compositorAddWindow (DisplayInfo *,
@@ -87,4 +79,6 @@ void compositorWindowSetOpacity (DisplayInfo *,
void compositorRebuildScreen (ScreenInfo *);
gboolean compositorTestServer (DisplayInfo *);
+vblankMode compositorVblankMode (const gchar *);
+
#endif /* INC_COMPOSITOR_H */
diff --git a/src/display.c b/src/display.c
index 0bb1698..b885307 100644
--- a/src/display.c
+++ b/src/display.c
@@ -1073,4 +1073,3 @@ myDisplayGetKeymap (DisplayInfo *display_info)
return gdk_keymap_get_default ();
#endif
}
-
diff --git a/src/display.h b/src/display.h
index 7fdeb9a..23e0f21 100644
--- a/src/display.h
+++ b/src/display.h
@@ -320,7 +320,6 @@ struct _DisplayInfo
guint32 last_user_time;
gboolean enable_compositor;
- gint vblank_method;
#ifdef HAVE_RENDER
gint render_error_base;
@@ -427,5 +426,4 @@ gint myDisplayErrorTrapPop (DisplayInfo *);
void myDisplayErrorTrapPopIgnored (DisplayInfo *);
void myDisplayBeep (DisplayInfo *);
GdkKeymap *myDisplayGetKeymap (DisplayInfo *);
-
#endif /* INC_DISPLAY_H */
diff --git a/src/main.c b/src/main.c
index 4f2b897..ae7c252 100644
--- a/src/main.c
+++ b/src/main.c
@@ -89,7 +89,6 @@ enum {
};
static gint compositor = COMPOSITOR_MODE_MANUAL;
-static gint vblank_method = VBLANK_AUTO;
#define XFWM4_ERROR (xfwm4_error_quark ())
#ifndef DEBUG
@@ -462,43 +461,6 @@ compositor_callback (const gchar *name,
return succeed;
}
-
-static gboolean
-vblank_callback (const gchar *name,
- const gchar *value,
- gpointer user_data,
- GError **error)
-{
- gboolean succeed = TRUE;
-
- g_return_val_if_fail (value != NULL, FALSE);
-
-#ifdef HAVE_PRESENT_EXTENSION
- if (strcmp (value, "xpresent") == 0)
- {
- vblank_method = VBLANK_XPRESENT;
- }
- else
-#endif /* HAVE_PRESENT_EXTENSION */
-#ifdef HAVE_EPOXY
- if (strcmp (value, "glx") == 0)
- {
- vblank_method = VBLANK_GLX;
- }
- else
-#endif /* HAVE_EPOXY */
- if (strcmp (value, "off") == 0)
- {
- vblank_method = VBLANK_OFF;
- }
- else
- {
- g_set_error (error, XFWM4_ERROR, 0, "Unrecognized compositor option \"%s\"", value);
- succeed = FALSE;
- }
-
- return succeed;
-}
#endif /* HAVE_COMPOSITOR */
static gboolean
@@ -537,7 +499,6 @@ initialize (gint compositor_mode, gboolean replace_wm)
{
display_info->enable_compositor = FALSE;
}
- display_info->vblank_method = vblank_method;
compositorSetCompositeMode (display_info, (compositor_mode == COMPOSITOR_MODE_MANUAL));
#else /* HAVE_COMPOSITOR */
display_info->enable_compositor = FALSE;
@@ -691,14 +652,6 @@ main (int argc, char **argv)
{ "daemon", '\0', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, daemon_callback, N_("Fork to the background (not supported)"), NULL },
#ifdef HAVE_COMPOSITOR
{ "compositor", '\0', 0, G_OPTION_ARG_CALLBACK, compositor_callback, N_("Set the compositor mode"), "on|off|auto" },
- { "vblank", '\0', 0, G_OPTION_ARG_CALLBACK, vblank_callback, N_("Set the vblank mode"), "off"
-#ifdef HAVE_PRESENT_EXTENSION
- "|xpresent"
-#endif /* HAVE_PRESENT_EXTENSION */
-#ifdef HAVE_EPOXY
- "|glx"
-#endif /* HAVE_EPOXY */
- },
#endif /* HAVE_COMPOSITOR */
{ "replace", '\0', 0, G_OPTION_ARG_NONE, &replace_wm, N_("Replace the existing window manager"), NULL },
{ "version", 'V', 0, G_OPTION_ARG_NONE, &version, N_("Print version information and exit"), NULL },
diff --git a/src/screen.h b/src/screen.h
index 01bc61c..3c8a843 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -68,6 +68,15 @@ struct _gaussian_conv {
double *data;
};
typedef struct _gaussian_conv gaussian_conv;
+
+typedef enum
+{
+ VBLANK_OFF = 0,
+ VBLANK_AUTO,
+ VBLANK_XPRESENT,
+ VBLANK_GLX,
+ VBLANK_ERROR,
+} vblankMode;
#endif /* HAVE_COMPOSITOR */
struct _ScreenInfo
@@ -205,6 +214,8 @@ struct _ScreenInfo
gboolean use_glx;
gboolean use_present;
+ vblankMode vblank_mode;
+
#ifdef HAVE_EPOXY
gboolean texture_inverted;
diff --git a/src/settings.c b/src/settings.c
index 8474c2e..7dbcffc 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -702,7 +702,7 @@ loadSettings (ScreenInfo *screen_info)
{"snap_to_border", NULL, G_TYPE_BOOLEAN, TRUE},
{"snap_to_windows", NULL, G_TYPE_BOOLEAN, TRUE},
{"snap_width", NULL, G_TYPE_INT, TRUE},
- {"sync_to_vblank", NULL, G_TYPE_BOOLEAN, TRUE},
+ {"vblank_mode", NULL, G_TYPE_STRING, FALSE},
{"theme", NULL, G_TYPE_STRING, TRUE},
{"tile_on_move", NULL, G_TYPE_BOOLEAN, TRUE},
{"title_alignment", NULL, G_TYPE_STRING, TRUE},
@@ -880,6 +880,12 @@ loadSettings (ScreenInfo *screen_info)
workspaceSetCount (screen_info, (guint) MAX (getIntValue ("workspace_count", rc), 1));
}
+ value = getStringValue ("vblank_mode", rc);
+ if (value)
+ {
+ screen_info->vblank_mode = compositorVblankMode (value);
+ }
+
freeRc (rc);
return TRUE;
}
@@ -1114,6 +1120,10 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_
{
/* These properties are not configurable via xfconf */
}
+ else if (!strcmp (name, "vblank_mode"))
+ {
+ /* This property is set at startup only */
+ }
else
{
g_warning("The property '%s' of type string is not supported", property_name);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list