summaryrefslogtreecommitdiff
path: root/mate-session/main.c
diff options
context:
space:
mode:
authorrbuj <[email protected]>2019-04-22 18:36:56 +0200
committerlukefromdc <[email protected]>2019-04-24 19:43:20 +0000
commit2d045dbe29b802fb7daad60678bff3043c776d79 (patch)
tree1cd7c4e6938320a2ae415611caf0605d52221ddc /mate-session/main.c
parent9870df4293bb0ea58f1232ab84108b40d74c1466 (diff)
downloadmate-session-manager-2d045dbe29b802fb7daad60678bff3043c776d79.tar.bz2
mate-session-manager-2d045dbe29b802fb7daad60678bff3043c776d79.tar.xz
Fix unable to retrieve org.gnome.SessionManager.Renderer property
Diffstat (limited to 'mate-session/main.c')
-rw-r--r--mate-session/main.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/mate-session/main.c b/mate-session/main.c
index cb1cbe7..4522aff 100644
--- a/mate-session/main.c
+++ b/mate-session/main.c
@@ -82,6 +82,8 @@
static gboolean failsafe = FALSE;
static gboolean show_version = FALSE;
static gboolean debug = FALSE;
+static gboolean disable_acceleration_check = FALSE;
+static char *gl_renderer = NULL;
static gboolean
initialize_gsettings (void)
@@ -569,6 +571,25 @@ static void set_overlay_scroll (void)
g_object_unref (settings);
}
+static gboolean
+check_gl (GError **error)
+{
+ int status;
+ char *argv[] = { LIBEXECDIR "/mate-session-check-accelerated", NULL };
+
+ if (getenv ("DISPLAY") == NULL) {
+ /* Not connected to X11, someone else will take care of checking GL */
+ return TRUE;
+ }
+
+ if (!g_spawn_sync (NULL, (char **) argv, NULL, 0, NULL, NULL, &gl_renderer, NULL,
+ &status, error)) {
+ return FALSE;
+ }
+
+ return g_spawn_check_exit_status (status, error);
+}
+
int main(int argc, char** argv)
{
struct sigaction sa;
@@ -581,12 +602,14 @@ int main(int argc, char** argv)
GSettings* accessibility_settings;
MdmSignalHandler* signal_handler;
static char** override_autostart_dirs = NULL;
+ gboolean gl_failed = FALSE;
static GOptionEntry entries[] = {
{"autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override standard autostart directories"), NULL},
{"debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL},
{"failsafe", 'f', 0, G_OPTION_ARG_NONE, &failsafe, N_("Do not load user-specified applications"), NULL},
{"version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL},
+ { "disable-acceleration-check", 0, 0, G_OPTION_ARG_NONE, &disable_acceleration_check, N_("Disable hardware acceleration check"), NULL },
{NULL, 0, 0, 0, NULL, NULL, NULL }
};
@@ -638,6 +661,33 @@ int main(int argc, char** argv)
mdm_log_set_debug(debug);
+ if (disable_acceleration_check) {
+ g_debug ("hardware acceleration check is disabled");
+ } else {
+ /* Check GL, if it doesn't work out then force software fallback */
+ if (!check_gl (&error)) {
+ gl_failed = TRUE;
+
+ g_debug ("hardware acceleration check failed: %s",
+ error? error->message : "");
+ g_clear_error (&error);
+ if (g_getenv ("LIBGL_ALWAYS_SOFTWARE") == NULL) {
+ g_setenv ("LIBGL_ALWAYS_SOFTWARE", "1", TRUE);
+ if (!check_gl (&error)) {
+ g_warning ("software acceleration check failed: %s",
+ error? error->message : "");
+ g_clear_error (&error);
+ } else {
+ gl_failed = FALSE;
+ }
+ }
+ }
+ }
+
+ if (gl_failed) {
+ g_warning ("gl_failed!");
+ }
+
if (g_getenv ("XDG_CURRENT_DESKTOP") == NULL)
gsm_util_setenv ("XDG_CURRENT_DESKTOP", "MATE");
@@ -703,6 +753,7 @@ int main(int argc, char** argv)
}
gsm_xsmp_server_start(xsmp_server);
+ _gsm_manager_set_renderer (manager, gl_renderer);
gsm_manager_start(manager);
gtk_main();
@@ -718,6 +769,11 @@ int main(int argc, char** argv)
g_object_unref(manager);
}
+ if (gl_renderer != NULL)
+ {
+ g_free (gl_renderer);
+ }
+
if (client_store != NULL)
{
g_object_unref(client_store);