Compare commits
8 Commits
3.18.2
...
wip/garnac
Author | SHA1 | Date | |
---|---|---|---|
![]() |
74be2e9f94 | ||
![]() |
a5d2555196 | ||
![]() |
dd5a4ecdf9 | ||
![]() |
43a1d43f2b | ||
![]() |
d6d377a447 | ||
![]() |
ffd95c2ad5 | ||
![]() |
72be89dfb9 | ||
![]() |
2feeb57dee |
12
NEWS
12
NEWS
@@ -1,15 +1,3 @@
|
|||||||
3.18.2
|
|
||||||
======
|
|
||||||
* Misc. crash fixes [Jonas, Rui; #756675, #756660, #757148, #756796]
|
|
||||||
* Fix modifiers-only input source switching on Ubuntu [Alberts; #756543]
|
|
||||||
* Exit cleanly on initialization errors [Owen; #757311]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Jonas Ådahl, Rui Matos, Alberts Muktupāvels, Florian Müllner, Owen W. Taylor
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Daniel Șerbănescu [ro]
|
|
||||||
|
|
||||||
3.18.1
|
3.18.1
|
||||||
======
|
======
|
||||||
* Misc. crash fixes [Jonas, Rui, Carlos, Owen, Florian; #755096, #754979,
|
* Misc. crash fixes [Jonas, Rui, Carlos, Owen, Florian; #755096, #754979,
|
||||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
|||||||
|
|
||||||
m4_define([mutter_major_version], [3])
|
m4_define([mutter_major_version], [3])
|
||||||
m4_define([mutter_minor_version], [18])
|
m4_define([mutter_minor_version], [18])
|
||||||
m4_define([mutter_micro_version], [2])
|
m4_define([mutter_micro_version], [1])
|
||||||
|
|
||||||
m4_define([mutter_version],
|
m4_define([mutter_version],
|
||||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||||
|
@@ -24,8 +24,6 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include <meta/meta-backend.h>
|
#include <meta/meta-backend.h>
|
||||||
#include "meta-backend-private.h"
|
#include "meta-backend-private.h"
|
||||||
#include "meta-input-settings-private.h"
|
#include "meta-input-settings-private.h"
|
||||||
@@ -628,10 +626,7 @@ meta_clutter_init (void)
|
|||||||
meta_create_backend ();
|
meta_create_backend ();
|
||||||
|
|
||||||
if (clutter_init (NULL, NULL) != CLUTTER_INIT_SUCCESS)
|
if (clutter_init (NULL, NULL) != CLUTTER_INIT_SUCCESS)
|
||||||
{
|
g_error ("Unable to initialize Clutter.\n");
|
||||||
g_warning ("Unable to initialize Clutter.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX: We cannot handle high dpi scaling yet, so fix the scale to 1
|
* XXX: We cannot handle high dpi scaling yet, so fix the scale to 1
|
||||||
|
@@ -414,10 +414,6 @@ gint meta_monitor_manager_get_monitor_at_point (MetaMonitorManager
|
|||||||
gfloat x,
|
gfloat x,
|
||||||
gfloat y);
|
gfloat y);
|
||||||
|
|
||||||
void meta_monitor_manager_clear_output (MetaOutput *output);
|
|
||||||
void meta_monitor_manager_clear_mode (MetaMonitorMode *mode);
|
|
||||||
void meta_monitor_manager_clear_crtc (MetaCRTC *crtc);
|
|
||||||
|
|
||||||
/* Returns true if transform causes width and height to be inverted
|
/* Returns true if transform causes width and height to be inverted
|
||||||
This is true for the odd transforms in the enum */
|
This is true for the odd transforms in the enum */
|
||||||
static inline gboolean
|
static inline gboolean
|
||||||
|
@@ -346,23 +346,6 @@ meta_monitor_manager_constructed (GObject *object)
|
|||||||
manager->in_init = FALSE;
|
manager->in_init = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
meta_monitor_manager_clear_output (MetaOutput *output)
|
|
||||||
{
|
|
||||||
g_free (output->name);
|
|
||||||
g_free (output->vendor);
|
|
||||||
g_free (output->product);
|
|
||||||
g_free (output->serial);
|
|
||||||
g_free (output->modes);
|
|
||||||
g_free (output->possible_crtcs);
|
|
||||||
g_free (output->possible_clones);
|
|
||||||
|
|
||||||
if (output->driver_notify)
|
|
||||||
output->driver_notify (output);
|
|
||||||
|
|
||||||
memset (output, 0, sizeof (*output));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
|
meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
|
||||||
int n_old_outputs)
|
int n_old_outputs)
|
||||||
@@ -370,22 +353,22 @@ meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < n_old_outputs; i++)
|
for (i = 0; i < n_old_outputs; i++)
|
||||||
meta_monitor_manager_clear_output (&old_outputs[i]);
|
{
|
||||||
|
g_free (old_outputs[i].name);
|
||||||
|
g_free (old_outputs[i].vendor);
|
||||||
|
g_free (old_outputs[i].product);
|
||||||
|
g_free (old_outputs[i].serial);
|
||||||
|
g_free (old_outputs[i].modes);
|
||||||
|
g_free (old_outputs[i].possible_crtcs);
|
||||||
|
g_free (old_outputs[i].possible_clones);
|
||||||
|
|
||||||
|
if (old_outputs[i].driver_notify)
|
||||||
|
old_outputs[i].driver_notify (&old_outputs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
g_free (old_outputs);
|
g_free (old_outputs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
meta_monitor_manager_clear_mode (MetaMonitorMode *mode)
|
|
||||||
{
|
|
||||||
g_free (mode->name);
|
|
||||||
|
|
||||||
if (mode->driver_notify)
|
|
||||||
mode->driver_notify (mode);
|
|
||||||
|
|
||||||
memset (mode, 0, sizeof (*mode));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
|
meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
|
||||||
int n_old_modes)
|
int n_old_modes)
|
||||||
@@ -393,20 +376,16 @@ meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < n_old_modes; i++)
|
for (i = 0; i < n_old_modes; i++)
|
||||||
meta_monitor_manager_clear_mode (&old_modes[i]);
|
{
|
||||||
|
g_free (old_modes[i].name);
|
||||||
|
|
||||||
|
if (old_modes[i].driver_notify)
|
||||||
|
old_modes[i].driver_notify (&old_modes[i]);
|
||||||
|
}
|
||||||
|
|
||||||
g_free (old_modes);
|
g_free (old_modes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
meta_monitor_manager_clear_crtc (MetaCRTC *crtc)
|
|
||||||
{
|
|
||||||
if (crtc->driver_notify)
|
|
||||||
crtc->driver_notify (crtc);
|
|
||||||
|
|
||||||
memset (crtc, 0, sizeof (*crtc));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_monitor_manager_free_crtc_array (MetaCRTC *old_crtcs,
|
meta_monitor_manager_free_crtc_array (MetaCRTC *old_crtcs,
|
||||||
int n_old_crtcs)
|
int n_old_crtcs)
|
||||||
@@ -414,7 +393,10 @@ meta_monitor_manager_free_crtc_array (MetaCRTC *old_crtcs,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < n_old_crtcs; i++)
|
for (i = 0; i < n_old_crtcs; i++)
|
||||||
meta_monitor_manager_clear_crtc (&old_crtcs[i]);
|
{
|
||||||
|
if (old_crtcs[i].driver_notify)
|
||||||
|
old_crtcs[i].driver_notify (&old_crtcs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
g_free (old_crtcs);
|
g_free (old_crtcs);
|
||||||
}
|
}
|
||||||
|
@@ -37,8 +37,6 @@
|
|||||||
#include "meta-cursor-renderer-native.h"
|
#include "meta-cursor-renderer-native.h"
|
||||||
#include "meta-launcher.h"
|
#include "meta-launcher.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
struct _MetaBackendNativePrivate
|
struct _MetaBackendNativePrivate
|
||||||
{
|
{
|
||||||
MetaLauncher *launcher;
|
MetaLauncher *launcher;
|
||||||
@@ -329,15 +327,8 @@ static void
|
|||||||
meta_backend_native_init (MetaBackendNative *native)
|
meta_backend_native_init (MetaBackendNative *native)
|
||||||
{
|
{
|
||||||
MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
|
MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
priv->launcher = meta_launcher_new (&error);
|
|
||||||
if (priv->launcher == NULL)
|
|
||||||
{
|
|
||||||
g_warning ("Can't initialize KMS backend: %s\n", error->message);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
priv->launcher = meta_launcher_new ();
|
||||||
priv->barrier_manager = meta_barrier_manager_native_new ();
|
priv->barrier_manager = meta_barrier_manager_native_new ();
|
||||||
|
|
||||||
priv->up_client = up_client_new ();
|
priv->up_client = up_client_new ();
|
||||||
|
@@ -54,22 +54,30 @@ struct _MetaLauncher
|
|||||||
gboolean session_active;
|
gboolean session_active;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
report_error_and_die (const char *prefix,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
/* if a function returns due to g_return_val_if_fail,
|
||||||
|
* then the error may not be set */
|
||||||
|
if (error)
|
||||||
|
g_error ("%s: %s", prefix, error->message);
|
||||||
|
else
|
||||||
|
g_error ("%s", prefix);
|
||||||
|
|
||||||
|
/* the error is not freed, but it is ok as g_error aborts the process */
|
||||||
|
}
|
||||||
|
|
||||||
static Login1Session *
|
static Login1Session *
|
||||||
get_session_proxy (GCancellable *cancellable,
|
get_session_proxy (GCancellable *cancellable)
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
char *proxy_path;
|
char *proxy_path;
|
||||||
char *session_id;
|
char *session_id;
|
||||||
Login1Session *session_proxy;
|
Login1Session *session_proxy;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
if (sd_pid_get_session (getpid (), &session_id) < 0)
|
if (sd_pid_get_session (getpid (), &session_id) < 0)
|
||||||
{
|
return NULL;
|
||||||
g_set_error (error,
|
|
||||||
G_IO_ERROR,
|
|
||||||
G_IO_ERROR_NOT_FOUND,
|
|
||||||
"Could not get session ID: %m");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_path = get_escaped_dbus_path ("/org/freedesktop/login1/session", session_id);
|
proxy_path = get_escaped_dbus_path ("/org/freedesktop/login1/session", session_id);
|
||||||
|
|
||||||
@@ -77,9 +85,9 @@ get_session_proxy (GCancellable *cancellable,
|
|||||||
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||||
"org.freedesktop.login1",
|
"org.freedesktop.login1",
|
||||||
proxy_path,
|
proxy_path,
|
||||||
cancellable, error);
|
cancellable, &error);
|
||||||
if (!session_proxy)
|
if (!session_proxy)
|
||||||
g_prefix_error(error, "Could not get session proxy: ");
|
report_error_and_die ("Failed getting session proxy", error);
|
||||||
|
|
||||||
free (proxy_path);
|
free (proxy_path);
|
||||||
|
|
||||||
@@ -87,16 +95,16 @@ get_session_proxy (GCancellable *cancellable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Login1Seat *
|
static Login1Seat *
|
||||||
get_seat_proxy (GCancellable *cancellable,
|
get_seat_proxy (GCancellable *cancellable)
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
|
GError *error = NULL;
|
||||||
Login1Seat *seat = login1_seat_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
Login1Seat *seat = login1_seat_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
||||||
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||||
"org.freedesktop.login1",
|
"org.freedesktop.login1",
|
||||||
"/org/freedesktop/login1/seat/self",
|
"/org/freedesktop/login1/seat/self",
|
||||||
cancellable, error);
|
cancellable, &error);
|
||||||
if (!seat)
|
if (!seat)
|
||||||
g_prefix_error(error, "Could not get seat proxy: ");
|
report_error_and_die ("Could not get seat proxy", error);
|
||||||
|
|
||||||
return seat;
|
return seat;
|
||||||
}
|
}
|
||||||
@@ -349,114 +357,69 @@ out:
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
get_kms_fd (Login1Session *session_proxy,
|
get_kms_fd (Login1Session *session_proxy,
|
||||||
const gchar *seat_id,
|
const gchar *seat_id,
|
||||||
int *fd_out,
|
int *fd_out)
|
||||||
GError **error)
|
|
||||||
{
|
{
|
||||||
int major, minor;
|
int major, minor;
|
||||||
int fd;
|
int fd;
|
||||||
|
gchar *path;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
g_autofree gchar *path = get_primary_gpu_path (seat_id);
|
path = get_primary_gpu_path (seat_id);
|
||||||
if (!path)
|
if (!path)
|
||||||
{
|
g_error ("could not find drm kms device");
|
||||||
g_set_error (error,
|
|
||||||
G_IO_ERROR,
|
|
||||||
G_IO_ERROR_NOT_FOUND,
|
|
||||||
"could not find drm kms device");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!get_device_info_from_path (path, &major, &minor))
|
if (!get_device_info_from_path (path, &major, &minor))
|
||||||
{
|
g_error ("Could not stat %s: %m", path);
|
||||||
g_set_error (error,
|
|
||||||
G_IO_ERROR,
|
|
||||||
G_IO_ERROR_NOT_FOUND,
|
|
||||||
"Could not get device info for path %s: %m", path);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!take_device (session_proxy, major, minor, &fd, NULL, error))
|
g_free (path);
|
||||||
{
|
|
||||||
g_prefix_error (error, "Could not open DRM device: ");
|
if (!take_device (session_proxy, major, minor, &fd, NULL, &error))
|
||||||
return FALSE;
|
report_error_and_die ("Could not open DRM device", error);
|
||||||
}
|
|
||||||
|
|
||||||
*fd_out = fd;
|
*fd_out = fd;
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
get_seat_id (GError **error)
|
get_seat_id (void)
|
||||||
{
|
{
|
||||||
char *session_id, *seat_id;
|
char *session_id, *seat_id = NULL;
|
||||||
int r;
|
|
||||||
|
|
||||||
r = sd_pid_get_session (0, &session_id);
|
if (sd_pid_get_session (0, &session_id) < 0)
|
||||||
if (r < 0)
|
return NULL;
|
||||||
{
|
|
||||||
g_set_error (error,
|
|
||||||
G_IO_ERROR,
|
|
||||||
G_IO_ERROR_NOT_FOUND,
|
|
||||||
"Could not get session for PID: %s", g_strerror (-r));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = sd_session_get_seat (session_id, &seat_id);
|
/* on error the seat_id will remain NULL */
|
||||||
|
sd_session_get_seat (session_id, &seat_id);
|
||||||
free (session_id);
|
free (session_id);
|
||||||
|
|
||||||
if (r < 0)
|
|
||||||
{
|
|
||||||
g_set_error (error,
|
|
||||||
G_IO_ERROR,
|
|
||||||
G_IO_ERROR_NOT_FOUND,
|
|
||||||
"Could not get seat for session: %s", g_strerror (-r));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return seat_id;
|
return seat_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaLauncher *
|
MetaLauncher *
|
||||||
meta_launcher_new (GError **error)
|
meta_launcher_new (void)
|
||||||
{
|
{
|
||||||
MetaLauncher *self = NULL;
|
MetaLauncher *self = NULL;
|
||||||
Login1Session *session_proxy = NULL;
|
Login1Session *session_proxy;
|
||||||
Login1Seat *seat_proxy = NULL;
|
char *seat_id;
|
||||||
char *seat_id = NULL;
|
GError *error = NULL;
|
||||||
gboolean have_control = FALSE;
|
|
||||||
int kms_fd;
|
int kms_fd;
|
||||||
|
|
||||||
session_proxy = get_session_proxy (NULL, error);
|
session_proxy = get_session_proxy (NULL);
|
||||||
if (!session_proxy)
|
if (!login1_session_call_take_control_sync (session_proxy, FALSE, NULL, &error))
|
||||||
goto fail;
|
report_error_and_die ("Could not take control", error);
|
||||||
|
|
||||||
if (!login1_session_call_take_control_sync (session_proxy, FALSE, NULL, error))
|
seat_id = get_seat_id ();
|
||||||
{
|
|
||||||
g_prefix_error (error, "Could not take control: ");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
have_control = TRUE;
|
|
||||||
|
|
||||||
seat_id = get_seat_id (error);
|
|
||||||
if (!seat_id)
|
if (!seat_id)
|
||||||
goto fail;
|
g_error ("Failed getting seat id");
|
||||||
|
|
||||||
seat_proxy = get_seat_proxy (NULL, error);
|
|
||||||
if (!seat_proxy)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if (!get_kms_fd (session_proxy, seat_id, &kms_fd, error))
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
|
get_kms_fd (session_proxy, seat_id, &kms_fd);
|
||||||
free (seat_id);
|
free (seat_id);
|
||||||
|
|
||||||
self = g_slice_new0 (MetaLauncher);
|
self = g_slice_new0 (MetaLauncher);
|
||||||
self->session_proxy = session_proxy;
|
self->session_proxy = session_proxy;
|
||||||
self->seat_proxy = seat_proxy;
|
self->seat_proxy = get_seat_proxy (NULL);
|
||||||
|
|
||||||
self->session_active = TRUE;
|
self->session_active = TRUE;
|
||||||
|
|
||||||
@@ -466,16 +429,8 @@ meta_launcher_new (GError **error)
|
|||||||
self);
|
self);
|
||||||
|
|
||||||
g_signal_connect (self->session_proxy, "notify::active", G_CALLBACK (on_active_changed), self);
|
g_signal_connect (self->session_proxy, "notify::active", G_CALLBACK (on_active_changed), self);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
||||||
fail:
|
|
||||||
if (have_control)
|
|
||||||
login1_session_call_release_control_sync (session_proxy, NULL, NULL);
|
|
||||||
g_clear_object (&session_proxy);
|
|
||||||
g_clear_object (&seat_proxy);
|
|
||||||
free (seat_id);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
typedef struct _MetaLauncher MetaLauncher;
|
typedef struct _MetaLauncher MetaLauncher;
|
||||||
|
|
||||||
MetaLauncher *meta_launcher_new (GError **error);
|
MetaLauncher *meta_launcher_new (void);
|
||||||
void meta_launcher_free (MetaLauncher *self);
|
void meta_launcher_free (MetaLauncher *self);
|
||||||
|
|
||||||
gboolean meta_launcher_activate_session (MetaLauncher *self,
|
gboolean meta_launcher_activate_session (MetaLauncher *self,
|
||||||
|
@@ -82,7 +82,6 @@ struct _MetaBackendX11Private
|
|||||||
gchar *keymap_layouts;
|
gchar *keymap_layouts;
|
||||||
gchar *keymap_variants;
|
gchar *keymap_variants;
|
||||||
gchar *keymap_options;
|
gchar *keymap_options;
|
||||||
int locked_group;
|
|
||||||
};
|
};
|
||||||
typedef struct _MetaBackendX11Private MetaBackendX11Private;
|
typedef struct _MetaBackendX11Private MetaBackendX11Private;
|
||||||
|
|
||||||
@@ -298,23 +297,15 @@ handle_host_xevent (MetaBackend *backend,
|
|||||||
|
|
||||||
if (event->type == priv->xkb_event_base)
|
if (event->type == priv->xkb_event_base)
|
||||||
{
|
{
|
||||||
XkbEvent *xkb_ev = (XkbEvent *) event;
|
XkbAnyEvent *xkb_ev = (XkbAnyEvent *) event;
|
||||||
|
|
||||||
if (xkb_ev->any.device == META_VIRTUAL_CORE_KEYBOARD_ID)
|
if (xkb_ev->device == META_VIRTUAL_CORE_KEYBOARD_ID)
|
||||||
{
|
{
|
||||||
switch (xkb_ev->any.xkb_type)
|
switch (xkb_ev->xkb_type)
|
||||||
{
|
{
|
||||||
case XkbNewKeyboardNotify:
|
case XkbNewKeyboardNotify:
|
||||||
case XkbMapNotify:
|
case XkbMapNotify:
|
||||||
keymap_changed (backend);
|
keymap_changed (backend);
|
||||||
break;
|
|
||||||
case XkbStateNotify:
|
|
||||||
if (xkb_ev->state.changed & XkbGroupLockMask)
|
|
||||||
{
|
|
||||||
if (priv->locked_group != xkb_ev->state.locked_group)
|
|
||||||
XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, priv->locked_group);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -785,7 +776,6 @@ meta_backend_x11_lock_layout_group (MetaBackend *backend,
|
|||||||
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
||||||
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
|
|
||||||
priv->locked_group = idx;
|
|
||||||
XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, idx);
|
XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -661,44 +661,6 @@ output_get_modes (MetaMonitorManager *manager,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
meta_output->n_modes = n_actual_modes;
|
meta_output->n_modes = n_actual_modes;
|
||||||
if (n_actual_modes > 0)
|
|
||||||
meta_output->preferred_mode = meta_output->modes[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
output_get_crtcs (MetaMonitorManager *manager,
|
|
||||||
MetaOutput *meta_output,
|
|
||||||
XRROutputInfo *output)
|
|
||||||
{
|
|
||||||
guint j, k;
|
|
||||||
guint n_actual_crtcs;
|
|
||||||
|
|
||||||
meta_output->possible_crtcs = g_new0 (MetaCRTC *, output->ncrtc);
|
|
||||||
|
|
||||||
n_actual_crtcs = 0;
|
|
||||||
for (j = 0; j < (unsigned)output->ncrtc; j++)
|
|
||||||
{
|
|
||||||
for (k = 0; k < manager->n_crtcs; k++)
|
|
||||||
{
|
|
||||||
if ((XID)manager->crtcs[k].crtc_id == output->crtcs[j])
|
|
||||||
{
|
|
||||||
meta_output->possible_crtcs[n_actual_crtcs] = &manager->crtcs[k];
|
|
||||||
n_actual_crtcs += 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
meta_output->n_possible_crtcs = n_actual_crtcs;
|
|
||||||
|
|
||||||
meta_output->crtc = NULL;
|
|
||||||
for (j = 0; j < manager->n_crtcs; j++)
|
|
||||||
{
|
|
||||||
if ((XID)manager->crtcs[j].crtc_id == output->crtc)
|
|
||||||
{
|
|
||||||
meta_output->crtc = &manager->crtcs[j];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@@ -863,7 +825,31 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
|
|||||||
|
|
||||||
output_get_tile_info (manager_xrandr, meta_output);
|
output_get_tile_info (manager_xrandr, meta_output);
|
||||||
output_get_modes (manager, meta_output, output);
|
output_get_modes (manager, meta_output, output);
|
||||||
output_get_crtcs (manager, meta_output, output);
|
meta_output->preferred_mode = meta_output->modes[0];
|
||||||
|
|
||||||
|
meta_output->n_possible_crtcs = output->ncrtc;
|
||||||
|
meta_output->possible_crtcs = g_new0 (MetaCRTC *, meta_output->n_possible_crtcs);
|
||||||
|
for (j = 0; j < (unsigned)output->ncrtc; j++)
|
||||||
|
{
|
||||||
|
for (k = 0; k < manager->n_crtcs; k++)
|
||||||
|
{
|
||||||
|
if ((XID)manager->crtcs[k].crtc_id == output->crtcs[j])
|
||||||
|
{
|
||||||
|
meta_output->possible_crtcs[j] = &manager->crtcs[k];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
meta_output->crtc = NULL;
|
||||||
|
for (j = 0; j < manager->n_crtcs; j++)
|
||||||
|
{
|
||||||
|
if ((XID)manager->crtcs[j].crtc_id == output->crtc)
|
||||||
|
{
|
||||||
|
meta_output->crtc = &manager->crtcs[j];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
meta_output->n_possible_clones = output->nclone;
|
meta_output->n_possible_clones = output->nclone;
|
||||||
meta_output->possible_clones = g_new0 (MetaOutput *, meta_output->n_possible_clones);
|
meta_output->possible_clones = g_new0 (MetaOutput *, meta_output->n_possible_clones);
|
||||||
@@ -887,10 +873,7 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
|
|||||||
else
|
else
|
||||||
meta_output->backlight = -1;
|
meta_output->backlight = -1;
|
||||||
|
|
||||||
if (meta_output->n_modes == 0 || meta_output->n_possible_crtcs == 0)
|
n_actual_outputs++;
|
||||||
meta_monitor_manager_clear_output (meta_output);
|
|
||||||
else
|
|
||||||
n_actual_outputs++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XRRFreeOutputInfo (output);
|
XRRFreeOutputInfo (output);
|
||||||
|
@@ -1477,42 +1477,11 @@ button_function_from_string (const char *str)
|
|||||||
return META_BUTTON_FUNCTION_MAXIMIZE;
|
return META_BUTTON_FUNCTION_MAXIMIZE;
|
||||||
else if (strcmp (str, "close") == 0)
|
else if (strcmp (str, "close") == 0)
|
||||||
return META_BUTTON_FUNCTION_CLOSE;
|
return META_BUTTON_FUNCTION_CLOSE;
|
||||||
else if (strcmp (str, "shade") == 0)
|
|
||||||
return META_BUTTON_FUNCTION_SHADE;
|
|
||||||
else if (strcmp (str, "above") == 0)
|
|
||||||
return META_BUTTON_FUNCTION_ABOVE;
|
|
||||||
else if (strcmp (str, "stick") == 0)
|
|
||||||
return META_BUTTON_FUNCTION_STICK;
|
|
||||||
else
|
else
|
||||||
/* don't know; give up */
|
/* don't know; give up */
|
||||||
return META_BUTTON_FUNCTION_LAST;
|
return META_BUTTON_FUNCTION_LAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MetaButtonFunction
|
|
||||||
button_opposite_function (MetaButtonFunction ofwhat)
|
|
||||||
{
|
|
||||||
switch (ofwhat)
|
|
||||||
{
|
|
||||||
case META_BUTTON_FUNCTION_SHADE:
|
|
||||||
return META_BUTTON_FUNCTION_UNSHADE;
|
|
||||||
case META_BUTTON_FUNCTION_UNSHADE:
|
|
||||||
return META_BUTTON_FUNCTION_SHADE;
|
|
||||||
|
|
||||||
case META_BUTTON_FUNCTION_ABOVE:
|
|
||||||
return META_BUTTON_FUNCTION_UNABOVE;
|
|
||||||
case META_BUTTON_FUNCTION_UNABOVE:
|
|
||||||
return META_BUTTON_FUNCTION_ABOVE;
|
|
||||||
|
|
||||||
case META_BUTTON_FUNCTION_STICK:
|
|
||||||
return META_BUTTON_FUNCTION_UNSTICK;
|
|
||||||
case META_BUTTON_FUNCTION_UNSTICK:
|
|
||||||
return META_BUTTON_FUNCTION_STICK;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return META_BUTTON_FUNCTION_LAST;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
button_layout_handler (GVariant *value,
|
button_layout_handler (GVariant *value,
|
||||||
gpointer *result,
|
gpointer *result,
|
||||||
@@ -1556,12 +1525,6 @@ button_layout_handler (GVariant *value,
|
|||||||
if (i > 0 && strcmp("spacer", buttons[b]) == 0)
|
if (i > 0 && strcmp("spacer", buttons[b]) == 0)
|
||||||
{
|
{
|
||||||
new_layout.left_buttons_has_spacer[i-1] = TRUE;
|
new_layout.left_buttons_has_spacer[i-1] = TRUE;
|
||||||
f = button_opposite_function (f);
|
|
||||||
|
|
||||||
if (f != META_BUTTON_FUNCTION_LAST)
|
|
||||||
{
|
|
||||||
new_layout.left_buttons_has_spacer[i-2] = TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1570,11 +1533,6 @@ button_layout_handler (GVariant *value,
|
|||||||
new_layout.left_buttons[i] = f;
|
new_layout.left_buttons[i] = f;
|
||||||
used[f] = TRUE;
|
used[f] = TRUE;
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
f = button_opposite_function (f);
|
|
||||||
|
|
||||||
if (f != META_BUTTON_FUNCTION_LAST)
|
|
||||||
new_layout.left_buttons[i++] = f;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1618,11 +1576,6 @@ button_layout_handler (GVariant *value,
|
|||||||
if (i > 0 && strcmp("spacer", buttons[b]) == 0)
|
if (i > 0 && strcmp("spacer", buttons[b]) == 0)
|
||||||
{
|
{
|
||||||
new_layout.right_buttons_has_spacer[i-1] = TRUE;
|
new_layout.right_buttons_has_spacer[i-1] = TRUE;
|
||||||
f = button_opposite_function (f);
|
|
||||||
if (f != META_BUTTON_FUNCTION_LAST)
|
|
||||||
{
|
|
||||||
new_layout.right_buttons_has_spacer[i-2] = TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1631,12 +1584,6 @@ button_layout_handler (GVariant *value,
|
|||||||
new_layout.right_buttons[i] = f;
|
new_layout.right_buttons[i] = f;
|
||||||
used[f] = TRUE;
|
used[f] = TRUE;
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
f = button_opposite_function (f);
|
|
||||||
|
|
||||||
if (f != META_BUTTON_FUNCTION_LAST)
|
|
||||||
new_layout.right_buttons[i++] = f;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -3534,7 +3534,10 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
const MetaMonitorInfo *old, *new;
|
const MetaMonitorInfo *old, *new;
|
||||||
|
|
||||||
if (window->override_redirect || window->type == META_WINDOW_DESKTOP)
|
if (window->type == META_WINDOW_DESKTOP)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (window->override_redirect)
|
||||||
{
|
{
|
||||||
meta_window_update_monitor (window, FALSE);
|
meta_window_update_monitor (window, FALSE);
|
||||||
return;
|
return;
|
||||||
|
@@ -372,12 +372,6 @@ typedef enum
|
|||||||
* @META_BUTTON_FUNCTION_MINIMIZE: Minimize
|
* @META_BUTTON_FUNCTION_MINIMIZE: Minimize
|
||||||
* @META_BUTTON_FUNCTION_MAXIMIZE: Maximize
|
* @META_BUTTON_FUNCTION_MAXIMIZE: Maximize
|
||||||
* @META_BUTTON_FUNCTION_CLOSE: Close
|
* @META_BUTTON_FUNCTION_CLOSE: Close
|
||||||
* @META_BUTTON_FUNCTION_SHADE: Shade
|
|
||||||
* @META_BUTTON_FUNCTION_ABOVE: Above
|
|
||||||
* @META_BUTTON_FUNCTION_STICK: Stick
|
|
||||||
* @META_BUTTON_FUNCTION_UNSHADE: Unshade
|
|
||||||
* @META_BUTTON_FUNCTION_UNABOVE: Unabove
|
|
||||||
* @META_BUTTON_FUNCTION_UNSTICK: Unstick
|
|
||||||
* @META_BUTTON_FUNCTION_LAST: Marks the end of the #MetaButtonFunction enumeration
|
* @META_BUTTON_FUNCTION_LAST: Marks the end of the #MetaButtonFunction enumeration
|
||||||
*
|
*
|
||||||
* Function a window button can have. Note, you can't add stuff here
|
* Function a window button can have. Note, you can't add stuff here
|
||||||
@@ -390,12 +384,6 @@ typedef enum
|
|||||||
META_BUTTON_FUNCTION_MINIMIZE,
|
META_BUTTON_FUNCTION_MINIMIZE,
|
||||||
META_BUTTON_FUNCTION_MAXIMIZE,
|
META_BUTTON_FUNCTION_MAXIMIZE,
|
||||||
META_BUTTON_FUNCTION_CLOSE,
|
META_BUTTON_FUNCTION_CLOSE,
|
||||||
META_BUTTON_FUNCTION_SHADE,
|
|
||||||
META_BUTTON_FUNCTION_ABOVE,
|
|
||||||
META_BUTTON_FUNCTION_STICK,
|
|
||||||
META_BUTTON_FUNCTION_UNSHADE,
|
|
||||||
META_BUTTON_FUNCTION_UNABOVE,
|
|
||||||
META_BUTTON_FUNCTION_UNSTICK,
|
|
||||||
META_BUTTON_FUNCTION_APPMENU,
|
META_BUTTON_FUNCTION_APPMENU,
|
||||||
META_BUTTON_FUNCTION_LAST
|
META_BUTTON_FUNCTION_LAST
|
||||||
} MetaButtonFunction;
|
} MetaButtonFunction;
|
||||||
@@ -405,10 +393,10 @@ typedef enum
|
|||||||
/* Keep array size in sync with MAX_BUTTONS_PER_CORNER */
|
/* Keep array size in sync with MAX_BUTTONS_PER_CORNER */
|
||||||
/**
|
/**
|
||||||
* MetaButtonLayout:
|
* MetaButtonLayout:
|
||||||
* @left_buttons: (array fixed-size=11):
|
* @left_buttons: (array fixed-size=5):
|
||||||
* @right_buttons: (array fixed-size=11):
|
* @right_buttons: (array fixed-size=5):
|
||||||
* @left_buttons_has_spacer: (array fixed-size=11):
|
* @left_buttons_has_spacer: (array fixed-size=5):
|
||||||
* @right_buttons_has_spacer: (array fixed-size=11):
|
* @right_buttons_has_spacer: (array fixed-size=5):
|
||||||
*/
|
*/
|
||||||
typedef struct _MetaButtonLayout MetaButtonLayout;
|
typedef struct _MetaButtonLayout MetaButtonLayout;
|
||||||
struct _MetaButtonLayout
|
struct _MetaButtonLayout
|
||||||
|
@@ -9,8 +9,6 @@
|
|||||||
<method name="TakeControl">
|
<method name="TakeControl">
|
||||||
<arg name="force" type="b"/>
|
<arg name="force" type="b"/>
|
||||||
</method>
|
</method>
|
||||||
<method name="ReleaseControl">
|
|
||||||
</method>
|
|
||||||
<method name="TakeDevice">
|
<method name="TakeDevice">
|
||||||
<annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
|
<annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
|
||||||
<arg name="major" type="u" direction="in"/>
|
<arg name="major" type="u" direction="in"/>
|
||||||
|
108
src/ui/frames.c
108
src/ui/frames.c
@@ -970,12 +970,6 @@ meta_frame_left_click_event (MetaUIFrame *frame,
|
|||||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||||
case META_FRAME_CONTROL_MINIMIZE:
|
case META_FRAME_CONTROL_MINIMIZE:
|
||||||
case META_FRAME_CONTROL_DELETE:
|
case META_FRAME_CONTROL_DELETE:
|
||||||
case META_FRAME_CONTROL_SHADE:
|
|
||||||
case META_FRAME_CONTROL_UNSHADE:
|
|
||||||
case META_FRAME_CONTROL_ABOVE:
|
|
||||||
case META_FRAME_CONTROL_UNABOVE:
|
|
||||||
case META_FRAME_CONTROL_STICK:
|
|
||||||
case META_FRAME_CONTROL_UNSTICK:
|
|
||||||
case META_FRAME_CONTROL_MENU:
|
case META_FRAME_CONTROL_MENU:
|
||||||
case META_FRAME_CONTROL_APPMENU:
|
case META_FRAME_CONTROL_APPMENU:
|
||||||
frame->grab_button = event->button;
|
frame->grab_button = event->button;
|
||||||
@@ -1154,24 +1148,6 @@ handle_button_release_event (MetaUIFrame *frame,
|
|||||||
case META_FRAME_CONTROL_DELETE:
|
case META_FRAME_CONTROL_DELETE:
|
||||||
meta_window_delete (frame->meta_window, event->time);
|
meta_window_delete (frame->meta_window, event->time);
|
||||||
break;
|
break;
|
||||||
case META_FRAME_CONTROL_SHADE:
|
|
||||||
meta_window_shade (frame->meta_window, event->time);
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSHADE:
|
|
||||||
meta_window_unshade (frame->meta_window, event->time);
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_ABOVE:
|
|
||||||
meta_window_make_above (frame->meta_window);
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNABOVE:
|
|
||||||
meta_window_unmake_above (frame->meta_window);
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_STICK:
|
|
||||||
meta_window_stick (frame->meta_window);
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSTICK:
|
|
||||||
meta_window_unstick (frame->meta_window);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1220,18 +1196,6 @@ meta_ui_frame_update_prelit_control (MetaUIFrame *frame,
|
|||||||
break;
|
break;
|
||||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||||
break;
|
break;
|
||||||
case META_FRAME_CONTROL_SHADE:
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSHADE:
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_ABOVE:
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNABOVE:
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_STICK:
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSTICK:
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_RESIZE_SE:
|
case META_FRAME_CONTROL_RESIZE_SE:
|
||||||
cursor = META_CURSOR_SE_RESIZE;
|
cursor = META_CURSOR_SE_RESIZE;
|
||||||
break;
|
break;
|
||||||
@@ -1270,12 +1234,6 @@ meta_ui_frame_update_prelit_control (MetaUIFrame *frame,
|
|||||||
case META_FRAME_CONTROL_MINIMIZE:
|
case META_FRAME_CONTROL_MINIMIZE:
|
||||||
case META_FRAME_CONTROL_MAXIMIZE:
|
case META_FRAME_CONTROL_MAXIMIZE:
|
||||||
case META_FRAME_CONTROL_DELETE:
|
case META_FRAME_CONTROL_DELETE:
|
||||||
case META_FRAME_CONTROL_SHADE:
|
|
||||||
case META_FRAME_CONTROL_UNSHADE:
|
|
||||||
case META_FRAME_CONTROL_ABOVE:
|
|
||||||
case META_FRAME_CONTROL_UNABOVE:
|
|
||||||
case META_FRAME_CONTROL_STICK:
|
|
||||||
case META_FRAME_CONTROL_UNSTICK:
|
|
||||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||||
/* leave control set */
|
/* leave control set */
|
||||||
break;
|
break;
|
||||||
@@ -1487,24 +1445,6 @@ meta_ui_frame_paint (MetaUIFrame *frame,
|
|||||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||||
button_type = META_BUTTON_TYPE_MAXIMIZE;
|
button_type = META_BUTTON_TYPE_MAXIMIZE;
|
||||||
break;
|
break;
|
||||||
case META_FRAME_CONTROL_SHADE:
|
|
||||||
button_type = META_BUTTON_TYPE_SHADE;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSHADE:
|
|
||||||
button_type = META_BUTTON_TYPE_UNSHADE;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_ABOVE:
|
|
||||||
button_type = META_BUTTON_TYPE_ABOVE;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNABOVE:
|
|
||||||
button_type = META_BUTTON_TYPE_UNABOVE;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_STICK:
|
|
||||||
button_type = META_BUTTON_TYPE_STICK;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSTICK:
|
|
||||||
button_type = META_BUTTON_TYPE_UNSTICK;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_DELETE:
|
case META_FRAME_CONTROL_DELETE:
|
||||||
button_type = META_BUTTON_TYPE_CLOSE;
|
button_type = META_BUTTON_TYPE_CLOSE;
|
||||||
break;
|
break;
|
||||||
@@ -1624,24 +1564,6 @@ control_rect (MetaFrameControl control,
|
|||||||
case META_FRAME_CONTROL_UNMAXIMIZE:
|
case META_FRAME_CONTROL_UNMAXIMIZE:
|
||||||
rect = &fgeom->max_rect.visible;
|
rect = &fgeom->max_rect.visible;
|
||||||
break;
|
break;
|
||||||
case META_FRAME_CONTROL_SHADE:
|
|
||||||
rect = &fgeom->shade_rect.visible;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSHADE:
|
|
||||||
rect = &fgeom->unshade_rect.visible;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_ABOVE:
|
|
||||||
rect = &fgeom->above_rect.visible;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNABOVE:
|
|
||||||
rect = &fgeom->unabove_rect.visible;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_STICK:
|
|
||||||
rect = &fgeom->stick_rect.visible;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_UNSTICK:
|
|
||||||
rect = &fgeom->unstick_rect.visible;
|
|
||||||
break;
|
|
||||||
case META_FRAME_CONTROL_RESIZE_SE:
|
case META_FRAME_CONTROL_RESIZE_SE:
|
||||||
break;
|
break;
|
||||||
case META_FRAME_CONTROL_RESIZE_S:
|
case META_FRAME_CONTROL_RESIZE_S:
|
||||||
@@ -1726,36 +1648,6 @@ get_control (MetaUIFrame *frame, int root_x, int root_y)
|
|||||||
return META_FRAME_CONTROL_MAXIMIZE;
|
return META_FRAME_CONTROL_MAXIMIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (POINT_IN_RECT (x, y, fgeom.shade_rect.clickable))
|
|
||||||
{
|
|
||||||
return META_FRAME_CONTROL_SHADE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (POINT_IN_RECT (x, y, fgeom.unshade_rect.clickable))
|
|
||||||
{
|
|
||||||
return META_FRAME_CONTROL_UNSHADE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (POINT_IN_RECT (x, y, fgeom.above_rect.clickable))
|
|
||||||
{
|
|
||||||
return META_FRAME_CONTROL_ABOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (POINT_IN_RECT (x, y, fgeom.unabove_rect.clickable))
|
|
||||||
{
|
|
||||||
return META_FRAME_CONTROL_UNABOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (POINT_IN_RECT (x, y, fgeom.stick_rect.clickable))
|
|
||||||
{
|
|
||||||
return META_FRAME_CONTROL_STICK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (POINT_IN_RECT (x, y, fgeom.unstick_rect.clickable))
|
|
||||||
{
|
|
||||||
return META_FRAME_CONTROL_UNSTICK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* South resize always has priority over north resize,
|
/* South resize always has priority over north resize,
|
||||||
* in case of overlap.
|
* in case of overlap.
|
||||||
*/
|
*/
|
||||||
|
@@ -39,12 +39,6 @@ typedef enum
|
|||||||
META_FRAME_CONTROL_MINIMIZE,
|
META_FRAME_CONTROL_MINIMIZE,
|
||||||
META_FRAME_CONTROL_MAXIMIZE,
|
META_FRAME_CONTROL_MAXIMIZE,
|
||||||
META_FRAME_CONTROL_UNMAXIMIZE,
|
META_FRAME_CONTROL_UNMAXIMIZE,
|
||||||
META_FRAME_CONTROL_SHADE,
|
|
||||||
META_FRAME_CONTROL_UNSHADE,
|
|
||||||
META_FRAME_CONTROL_ABOVE,
|
|
||||||
META_FRAME_CONTROL_UNABOVE,
|
|
||||||
META_FRAME_CONTROL_STICK,
|
|
||||||
META_FRAME_CONTROL_UNSTICK,
|
|
||||||
META_FRAME_CONTROL_RESIZE_SE,
|
META_FRAME_CONTROL_RESIZE_SE,
|
||||||
META_FRAME_CONTROL_RESIZE_S,
|
META_FRAME_CONTROL_RESIZE_S,
|
||||||
META_FRAME_CONTROL_RESIZE_SW,
|
META_FRAME_CONTROL_RESIZE_SW,
|
||||||
|
@@ -115,7 +115,7 @@ struct _MetaFrameGeometry
|
|||||||
|
|
||||||
/* used for a memset hack */
|
/* used for a memset hack */
|
||||||
#define ADDRESS_OF_BUTTON_RECTS(fgeom) (((char*)(fgeom)) + G_STRUCT_OFFSET (MetaFrameGeometry, close_rect))
|
#define ADDRESS_OF_BUTTON_RECTS(fgeom) (((char*)(fgeom)) + G_STRUCT_OFFSET (MetaFrameGeometry, close_rect))
|
||||||
#define LENGTH_OF_BUTTON_RECTS (G_STRUCT_OFFSET (MetaFrameGeometry, unstick_rect) + sizeof (MetaButtonSpace) - G_STRUCT_OFFSET (MetaFrameGeometry, close_rect))
|
#define LENGTH_OF_BUTTON_RECTS (G_STRUCT_OFFSET (MetaFrameGeometry, appmenu_rect) + sizeof (MetaButtonSpace) - G_STRUCT_OFFSET (MetaFrameGeometry, close_rect))
|
||||||
|
|
||||||
/* The button rects (if changed adjust memset hack) */
|
/* The button rects (if changed adjust memset hack) */
|
||||||
MetaButtonSpace close_rect;
|
MetaButtonSpace close_rect;
|
||||||
@@ -123,12 +123,6 @@ struct _MetaFrameGeometry
|
|||||||
MetaButtonSpace min_rect;
|
MetaButtonSpace min_rect;
|
||||||
MetaButtonSpace menu_rect;
|
MetaButtonSpace menu_rect;
|
||||||
MetaButtonSpace appmenu_rect;
|
MetaButtonSpace appmenu_rect;
|
||||||
MetaButtonSpace shade_rect;
|
|
||||||
MetaButtonSpace above_rect;
|
|
||||||
MetaButtonSpace stick_rect;
|
|
||||||
MetaButtonSpace unshade_rect;
|
|
||||||
MetaButtonSpace unabove_rect;
|
|
||||||
MetaButtonSpace unstick_rect;
|
|
||||||
/* End of button rects (if changed adjust memset hack) */
|
/* End of button rects (if changed adjust memset hack) */
|
||||||
|
|
||||||
/* Saved button layout */
|
/* Saved button layout */
|
||||||
@@ -158,12 +152,6 @@ typedef enum
|
|||||||
META_BUTTON_TYPE_MINIMIZE,
|
META_BUTTON_TYPE_MINIMIZE,
|
||||||
META_BUTTON_TYPE_MENU,
|
META_BUTTON_TYPE_MENU,
|
||||||
META_BUTTON_TYPE_APPMENU,
|
META_BUTTON_TYPE_APPMENU,
|
||||||
META_BUTTON_TYPE_SHADE,
|
|
||||||
META_BUTTON_TYPE_ABOVE,
|
|
||||||
META_BUTTON_TYPE_STICK,
|
|
||||||
META_BUTTON_TYPE_UNSHADE,
|
|
||||||
META_BUTTON_TYPE_UNABOVE,
|
|
||||||
META_BUTTON_TYPE_UNSTICK,
|
|
||||||
META_BUTTON_TYPE_LAST
|
META_BUTTON_TYPE_LAST
|
||||||
} MetaButtonType;
|
} MetaButtonType;
|
||||||
|
|
||||||
|
@@ -177,17 +177,6 @@ rect_for_function (MetaFrameGeometry *fgeom,
|
|||||||
return &fgeom->close_rect;
|
return &fgeom->close_rect;
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
case META_BUTTON_FUNCTION_STICK:
|
|
||||||
case META_BUTTON_FUNCTION_SHADE:
|
|
||||||
case META_BUTTON_FUNCTION_ABOVE:
|
|
||||||
case META_BUTTON_FUNCTION_UNSTICK:
|
|
||||||
case META_BUTTON_FUNCTION_UNSHADE:
|
|
||||||
case META_BUTTON_FUNCTION_UNABOVE:
|
|
||||||
/* Fringe buttons that used to be supported by theme versions >v1;
|
|
||||||
* if we want to support them again, we need to return the
|
|
||||||
* correspondings rects here
|
|
||||||
*/
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
case META_BUTTON_FUNCTION_LAST:
|
case META_BUTTON_FUNCTION_LAST:
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -457,22 +446,10 @@ meta_frame_layout_calc_geometry (MetaFrameLayout *layout,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Otherwise we need to shave out a button. Shave
|
/* Otherwise we need to shave out a button. Shave
|
||||||
* above, stick, shade, min, max, close, then menu (menu is most useful);
|
* min, max, close, then menu (menu is most useful);
|
||||||
* prefer the default button locations.
|
* prefer the default button locations.
|
||||||
*/
|
*/
|
||||||
if (strip_button (left_func_rects, &n_left, &fgeom->above_rect))
|
if (strip_button (left_func_rects, &n_left, &fgeom->min_rect))
|
||||||
continue;
|
|
||||||
else if (strip_button (right_func_rects, &n_right, &fgeom->above_rect))
|
|
||||||
continue;
|
|
||||||
else if (strip_button (left_func_rects, &n_left, &fgeom->stick_rect))
|
|
||||||
continue;
|
|
||||||
else if (strip_button (right_func_rects, &n_right, &fgeom->stick_rect))
|
|
||||||
continue;
|
|
||||||
else if (strip_button (left_func_rects, &n_left, &fgeom->shade_rect))
|
|
||||||
continue;
|
|
||||||
else if (strip_button (right_func_rects, &n_right, &fgeom->shade_rect))
|
|
||||||
continue;
|
|
||||||
else if (strip_button (left_func_rects, &n_left, &fgeom->min_rect))
|
|
||||||
continue;
|
continue;
|
||||||
else if (strip_button (right_func_rects, &n_right, &fgeom->min_rect))
|
else if (strip_button (right_func_rects, &n_right, &fgeom->min_rect))
|
||||||
continue;
|
continue;
|
||||||
@@ -643,30 +620,6 @@ get_button_rect (MetaButtonType type,
|
|||||||
*rect = fgeom->close_rect.visible;
|
*rect = fgeom->close_rect.visible;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case META_BUTTON_TYPE_SHADE:
|
|
||||||
*rect = fgeom->shade_rect.visible;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case META_BUTTON_TYPE_UNSHADE:
|
|
||||||
*rect = fgeom->unshade_rect.visible;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case META_BUTTON_TYPE_ABOVE:
|
|
||||||
*rect = fgeom->above_rect.visible;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case META_BUTTON_TYPE_UNABOVE:
|
|
||||||
*rect = fgeom->unabove_rect.visible;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case META_BUTTON_TYPE_STICK:
|
|
||||||
*rect = fgeom->stick_rect.visible;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case META_BUTTON_TYPE_UNSTICK:
|
|
||||||
*rect = fgeom->unstick_rect.visible;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case META_BUTTON_TYPE_MAXIMIZE:
|
case META_BUTTON_TYPE_MAXIMIZE:
|
||||||
*rect = fgeom->max_rect.visible;
|
*rect = fgeom->max_rect.visible;
|
||||||
break;
|
break;
|
||||||
@@ -890,6 +843,7 @@ meta_frame_layout_draw_with_style (MetaFrameLayout *layout,
|
|||||||
cairo_restore (cr);
|
cairo_restore (cr);
|
||||||
if (button_class)
|
if (button_class)
|
||||||
gtk_style_context_remove_class (style, button_class);
|
gtk_style_context_remove_class (style, button_class);
|
||||||
|
gtk_style_context_set_state (style, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -251,11 +251,12 @@ notify_key (MetaWaylandKeyboard *keyboard,
|
|||||||
{
|
{
|
||||||
struct wl_client *client = wl_resource_get_client (keyboard->focus_surface->resource);
|
struct wl_client *client = wl_resource_get_client (keyboard->focus_surface->resource);
|
||||||
struct wl_display *display = wl_client_get_display (client);
|
struct wl_display *display = wl_client_get_display (client);
|
||||||
uint32_t serial = wl_display_next_serial (display);
|
|
||||||
|
keyboard->key_serial = wl_display_next_serial (display);
|
||||||
|
|
||||||
wl_resource_for_each (resource, l)
|
wl_resource_for_each (resource, l)
|
||||||
{
|
{
|
||||||
wl_keyboard_send_key (resource, serial, time, key, state);
|
wl_keyboard_send_key (resource, keyboard->key_serial, time, key, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -672,3 +673,10 @@ meta_wayland_keyboard_create_new_resource (MetaWaylandKeyboard *keyboard,
|
|||||||
wl_list_insert (&keyboard->resource_list, wl_resource_get_link (cr));
|
wl_list_insert (&keyboard->resource_list, wl_resource_get_link (cr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_wayland_keyboard_can_popup (MetaWaylandKeyboard *keyboard,
|
||||||
|
uint32_t serial)
|
||||||
|
{
|
||||||
|
return keyboard->key_serial == serial;
|
||||||
|
}
|
||||||
|
@@ -68,6 +68,7 @@ struct _MetaWaylandKeyboard
|
|||||||
MetaWaylandSurface *focus_surface;
|
MetaWaylandSurface *focus_surface;
|
||||||
struct wl_listener focus_surface_listener;
|
struct wl_listener focus_surface_listener;
|
||||||
uint32_t focus_serial;
|
uint32_t focus_serial;
|
||||||
|
uint32_t key_serial;
|
||||||
|
|
||||||
MetaWaylandXkbInfo xkb_info;
|
MetaWaylandXkbInfo xkb_info;
|
||||||
enum xkb_state_component mods_changed;
|
enum xkb_state_component mods_changed;
|
||||||
@@ -100,4 +101,7 @@ void meta_wayland_keyboard_create_new_resource (MetaWaylandKeyboard *keyboard,
|
|||||||
struct wl_resource *seat_resource,
|
struct wl_resource *seat_resource,
|
||||||
uint32_t id);
|
uint32_t id);
|
||||||
|
|
||||||
|
gboolean meta_wayland_keyboard_can_popup (MetaWaylandKeyboard *keyboard,
|
||||||
|
uint32_t serial);
|
||||||
|
|
||||||
#endif /* META_WAYLAND_KEYBOARD_H */
|
#endif /* META_WAYLAND_KEYBOARD_H */
|
||||||
|
@@ -494,10 +494,27 @@ handle_scroll_event (MetaWaylandPointer *pointer,
|
|||||||
{
|
{
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
wl_fixed_t x_value = 0, y_value = 0;
|
wl_fixed_t x_value = 0, y_value = 0;
|
||||||
|
enum wl_pointer_axis_source source = -1;
|
||||||
|
|
||||||
if (clutter_event_is_pointer_emulated (event))
|
if (clutter_event_is_pointer_emulated (event))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
switch (event->scroll.scroll_source)
|
||||||
|
{
|
||||||
|
case CLUTTER_SCROLL_SOURCE_WHEEL:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_WHEEL;
|
||||||
|
break;
|
||||||
|
case CLUTTER_SCROLL_SOURCE_FINGER:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_FINGER;
|
||||||
|
break;
|
||||||
|
case CLUTTER_SCROLL_SOURCE_CONTINUOUS:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_CONTINUOUS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
source = WL_POINTER_AXIS_SOURCE_WHEEL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch (clutter_event_get_scroll_direction (event))
|
switch (clutter_event_get_scroll_direction (event))
|
||||||
{
|
{
|
||||||
case CLUTTER_SCROLL_UP:
|
case CLUTTER_SCROLL_UP:
|
||||||
@@ -537,12 +554,31 @@ handle_scroll_event (MetaWaylandPointer *pointer,
|
|||||||
{
|
{
|
||||||
wl_resource_for_each (resource, &pointer->focus_client->pointer_resources)
|
wl_resource_for_each (resource, &pointer->focus_client->pointer_resources)
|
||||||
{
|
{
|
||||||
|
if (wl_resource_get_version (resource) >= WL_POINTER_AXIS_SOURCE_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_source (resource, source);
|
||||||
|
|
||||||
if (x_value)
|
if (x_value)
|
||||||
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
||||||
WL_POINTER_AXIS_HORIZONTAL_SCROLL, x_value);
|
WL_POINTER_AXIS_HORIZONTAL_SCROLL, x_value);
|
||||||
|
|
||||||
|
if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_HORIZONTAL) &&
|
||||||
|
wl_resource_get_version (resource) >= WL_POINTER_AXIS_STOP_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_stop (resource,
|
||||||
|
clutter_event_get_time (event),
|
||||||
|
WL_POINTER_AXIS_HORIZONTAL_SCROLL);
|
||||||
|
|
||||||
if (y_value)
|
if (y_value)
|
||||||
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
wl_pointer_send_axis (resource, clutter_event_get_time (event),
|
||||||
WL_POINTER_AXIS_VERTICAL_SCROLL, y_value);
|
WL_POINTER_AXIS_VERTICAL_SCROLL, y_value);
|
||||||
|
|
||||||
|
if ((event->scroll.finish_flags & CLUTTER_SCROLL_FINISHED_VERTICAL) &&
|
||||||
|
wl_resource_get_version (resource) >= WL_POINTER_AXIS_STOP_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_stop (resource,
|
||||||
|
clutter_event_get_time (event),
|
||||||
|
WL_POINTER_AXIS_VERTICAL_SCROLL);
|
||||||
|
|
||||||
|
if (wl_resource_get_version (resource) >= WL_POINTER_AXIS_SOURCE_SINCE_VERSION)
|
||||||
|
wl_pointer_send_axis_frame (resource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -405,3 +405,12 @@ meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
|
|||||||
|
|
||||||
return sequence || can_grab_surface;
|
return sequence || can_grab_surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_wayland_seat_can_popup (MetaWaylandSeat *seat,
|
||||||
|
uint32_t serial)
|
||||||
|
{
|
||||||
|
return (meta_wayland_pointer_can_popup (&seat->pointer, serial) ||
|
||||||
|
meta_wayland_keyboard_can_popup (&seat->keyboard, serial) ||
|
||||||
|
meta_wayland_touch_can_popup (&seat->touch, serial));
|
||||||
|
}
|
||||||
|
@@ -64,5 +64,7 @@ gboolean meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
|
|||||||
uint32_t serial,
|
uint32_t serial,
|
||||||
gfloat *x,
|
gfloat *x,
|
||||||
gfloat *y);
|
gfloat *y);
|
||||||
|
gboolean meta_wayland_seat_can_popup (MetaWaylandSeat *seat,
|
||||||
|
uint32_t serial);
|
||||||
|
|
||||||
#endif /* META_WAYLAND_SEAT_H */
|
#endif /* META_WAYLAND_SEAT_H */
|
||||||
|
@@ -1518,7 +1518,7 @@ xdg_shell_get_xdg_popup (struct wl_client *client,
|
|||||||
surface->xdg_popup = popup_resource;
|
surface->xdg_popup = popup_resource;
|
||||||
surface->xdg_shell_resource = resource;
|
surface->xdg_shell_resource = resource;
|
||||||
|
|
||||||
if (!meta_wayland_pointer_can_popup (&seat->pointer, serial))
|
if (!meta_wayland_seat_can_popup (seat, serial))
|
||||||
{
|
{
|
||||||
xdg_popup_send_popup_done (popup_resource);
|
xdg_popup_send_popup_done (popup_resource);
|
||||||
return;
|
return;
|
||||||
@@ -1739,7 +1739,7 @@ wl_shell_surface_set_popup (struct wl_client *client,
|
|||||||
|
|
||||||
wl_shell_surface_set_state (surface, SURFACE_STATE_TOPLEVEL);
|
wl_shell_surface_set_state (surface, SURFACE_STATE_TOPLEVEL);
|
||||||
|
|
||||||
if (!meta_wayland_pointer_can_popup (&seat->pointer, serial))
|
if (!meta_wayland_seat_can_popup (seat, serial))
|
||||||
{
|
{
|
||||||
wl_shell_surface_send_popup_done (resource);
|
wl_shell_surface_send_popup_done (resource);
|
||||||
return;
|
return;
|
||||||
|
@@ -575,6 +575,26 @@ meta_wayland_touch_create_new_resource (MetaWaylandTouch *touch,
|
|||||||
wl_list_insert (&touch->resource_list, wl_resource_get_link (cr));
|
wl_list_insert (&touch->resource_list, wl_resource_get_link (cr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_wayland_touch_can_popup (MetaWaylandTouch *touch,
|
||||||
|
uint32_t serial)
|
||||||
|
{
|
||||||
|
MetaWaylandTouchInfo *touch_info;
|
||||||
|
GHashTableIter iter;
|
||||||
|
|
||||||
|
if (!touch->touches)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, touch->touches);
|
||||||
|
|
||||||
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &touch_info))
|
||||||
|
{
|
||||||
|
if (touch_info->slot_serial == serial)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
ClutterEventSequence *
|
ClutterEventSequence *
|
||||||
meta_wayland_touch_find_grab_sequence (MetaWaylandTouch *touch,
|
meta_wayland_touch_find_grab_sequence (MetaWaylandTouch *touch,
|
||||||
MetaWaylandSurface *surface,
|
MetaWaylandSurface *surface,
|
||||||
|
@@ -70,4 +70,7 @@ gboolean meta_wayland_touch_get_press_coords (MetaWaylandTouch *touch,
|
|||||||
gfloat *x,
|
gfloat *x,
|
||||||
gfloat *y);
|
gfloat *y);
|
||||||
|
|
||||||
|
gboolean meta_wayland_touch_can_popup (MetaWaylandTouch *touch,
|
||||||
|
uint32_t serial);
|
||||||
|
|
||||||
#endif /* META_WAYLAND_TOUCH_H */
|
#endif /* META_WAYLAND_TOUCH_H */
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
#define META_WL_DATA_DEVICE_MANAGER_VERSION 2
|
#define META_WL_DATA_DEVICE_MANAGER_VERSION 2
|
||||||
#define META_XDG_SHELL_VERSION 1
|
#define META_XDG_SHELL_VERSION 1
|
||||||
#define META_WL_SHELL_VERSION 1
|
#define META_WL_SHELL_VERSION 1
|
||||||
#define META_WL_SEAT_VERSION 4
|
#define META_WL_SEAT_VERSION 5
|
||||||
#define META_WL_OUTPUT_VERSION 2
|
#define META_WL_OUTPUT_VERSION 2
|
||||||
#define META_XSERVER_VERSION 1
|
#define META_XSERVER_VERSION 1
|
||||||
#define META_GTK_SHELL_VERSION 2
|
#define META_GTK_SHELL_VERSION 2
|
||||||
|
Reference in New Issue
Block a user