feat: add output power manager
This commit is contained in:
parent
bdd6bae1a9
commit
f1281858d3
@ -1,6 +1,6 @@
|
|||||||
project('diya-shell',
|
project('diya-shell',
|
||||||
['c'],
|
['c'],
|
||||||
version: '0.1.1',
|
version: '0.1.2',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
meson_version: '>=0.58.0',
|
meson_version: '>=0.58.0',
|
||||||
default_options: ['c_std=gnu11', 'warning_level=3'])
|
default_options: ['c_std=gnu11', 'warning_level=3'])
|
||||||
@ -39,7 +39,8 @@ wl_protocols = [
|
|||||||
wl_protocol_dir / 'staging/ext-session-lock/ext-session-lock-v1',
|
wl_protocol_dir / 'staging/ext-session-lock/ext-session-lock-v1',
|
||||||
wl_protocol_dir / 'staging/ext-idle-notify/ext-idle-notify-v1',
|
wl_protocol_dir / 'staging/ext-idle-notify/ext-idle-notify-v1',
|
||||||
'protocols/wlr-foreign-toplevel-management-unstable-v1',
|
'protocols/wlr-foreign-toplevel-management-unstable-v1',
|
||||||
'protocols/virtual-keyboard-unstable-v1'
|
'protocols/virtual-keyboard-unstable-v1',
|
||||||
|
'protocols/wlr-output-power-management-unstable-v1',
|
||||||
]
|
]
|
||||||
|
|
||||||
foreach proto : wl_protocols
|
foreach proto : wl_protocols
|
||||||
@ -66,6 +67,7 @@ base = [
|
|||||||
'src/virtual-keyboard.c',
|
'src/virtual-keyboard.c',
|
||||||
'src/widgets/virtual-keyboard-widgets.c',
|
'src/widgets/virtual-keyboard-widgets.c',
|
||||||
'src/files-monitor.c',
|
'src/files-monitor.c',
|
||||||
|
'src/idle.c',
|
||||||
wayland_targets
|
wayland_targets
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -77,7 +79,6 @@ dm_src = [
|
|||||||
'src/foreign.c',
|
'src/foreign.c',
|
||||||
'src/session-lock.c',
|
'src/session-lock.c',
|
||||||
'src/session.c',
|
'src/session.c',
|
||||||
'src/idle.c',
|
|
||||||
'src/widgets/base-widgets.c',
|
'src/widgets/base-widgets.c',
|
||||||
'src/widgets/taskbar-widget.c',
|
'src/widgets/taskbar-widget.c',
|
||||||
'src/widgets/dashboard-widget.c',
|
'src/widgets/dashboard-widget.c',
|
||||||
|
128
protocols/wlr-output-power-management-unstable-v1.xml
Normal file
128
protocols/wlr-output-power-management-unstable-v1.xml
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<protocol name="wlr_output_power_management_unstable_v1">
|
||||||
|
<copyright>
|
||||||
|
Copyright © 2019 Purism SPC
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice (including the next
|
||||||
|
paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<description summary="Control power management modes of outputs">
|
||||||
|
This protocol allows clients to control power management modes
|
||||||
|
of outputs that are currently part of the compositor space. The
|
||||||
|
intent is to allow special clients like desktop shells to power
|
||||||
|
down outputs when the system is idle.
|
||||||
|
|
||||||
|
To modify outputs not currently part of the compositor space see
|
||||||
|
wlr-output-management.
|
||||||
|
|
||||||
|
Warning! The protocol described in this file is experimental and
|
||||||
|
backward incompatible changes may be made. Backward compatible changes
|
||||||
|
may be added together with the corresponding interface version bump.
|
||||||
|
Backward incompatible changes are done by bumping the version number in
|
||||||
|
the protocol and interface names and resetting the interface version.
|
||||||
|
Once the protocol is to be declared stable, the 'z' prefix and the
|
||||||
|
version number in the protocol and interface names are removed and the
|
||||||
|
interface version number is reset.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<interface name="zwlr_output_power_manager_v1" version="1">
|
||||||
|
<description summary="manager to create per-output power management">
|
||||||
|
This interface is a manager that allows creating per-output power
|
||||||
|
management mode controls.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="get_output_power">
|
||||||
|
<description summary="get a power management for an output">
|
||||||
|
Create an output power management mode control that can be used to
|
||||||
|
adjust the power management mode for a given output.
|
||||||
|
</description>
|
||||||
|
<arg name="id" type="new_id" interface="zwlr_output_power_v1"/>
|
||||||
|
<arg name="output" type="object" interface="wl_output"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy the manager">
|
||||||
|
All objects created by the manager will still remain valid, until their
|
||||||
|
appropriate destroy request has been called.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="zwlr_output_power_v1" version="1">
|
||||||
|
<description summary="adjust power management mode for an output">
|
||||||
|
This object offers requests to set the power management mode of
|
||||||
|
an output.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<enum name="mode">
|
||||||
|
<entry name="off" value="0"
|
||||||
|
summary="Output is turned off."/>
|
||||||
|
<entry name="on" value="1"
|
||||||
|
summary="Output is turned on, no power saving"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="invalid_mode" value="1" summary="nonexistent power save mode"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="set_mode">
|
||||||
|
<description summary="Set an outputs power save mode">
|
||||||
|
Set an output's power save mode to the given mode. The mode change
|
||||||
|
is effective immediately. If the output does not support the given
|
||||||
|
mode a failed event is sent.
|
||||||
|
</description>
|
||||||
|
<arg name="mode" type="uint" enum="mode" summary="the power save mode to set"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<event name="mode">
|
||||||
|
<description summary="Report a power management mode change">
|
||||||
|
Report the power management mode change of an output.
|
||||||
|
|
||||||
|
The mode event is sent after an output changed its power
|
||||||
|
management mode. The reason can be a client using set_mode or the
|
||||||
|
compositor deciding to change an output's mode.
|
||||||
|
This event is also sent immediately when the object is created
|
||||||
|
so the client is informed about the current power management mode.
|
||||||
|
</description>
|
||||||
|
<arg name="mode" type="uint" enum="mode"
|
||||||
|
summary="the output's new power management mode"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="failed">
|
||||||
|
<description summary="object no longer valid">
|
||||||
|
This event indicates that the output power management mode control
|
||||||
|
is no longer valid. This can happen for a number of reasons,
|
||||||
|
including:
|
||||||
|
- The output doesn't support power management
|
||||||
|
- Another client already has exclusive power management mode control
|
||||||
|
for this output
|
||||||
|
- The output disappeared
|
||||||
|
|
||||||
|
Upon receiving this event, the client should destroy this object.
|
||||||
|
</description>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy this power management">
|
||||||
|
Destroys the output power management mode control object.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
</protocol>
|
@ -112,12 +112,6 @@ static const struct ext_idle_notification_v1_listener g_idle_listener_impl =
|
|||||||
.resumed = diya_resume
|
.resumed = diya_resume
|
||||||
};
|
};
|
||||||
|
|
||||||
void diya_idle_manager_register(gpointer mngr, DiyaShell *shell)
|
|
||||||
{
|
|
||||||
(void) mngr;
|
|
||||||
(void) shell;
|
|
||||||
}
|
|
||||||
|
|
||||||
DiyaIdleNotification* diya_shell_get_idle_notification(DiyaShell* shell, guint timeout_ms)
|
DiyaIdleNotification* diya_shell_get_idle_notification(DiyaShell* shell, guint timeout_ms)
|
||||||
{
|
{
|
||||||
DiyaWayland *wayland = diya_shell_get_wayland(shell);
|
DiyaWayland *wayland = diya_shell_get_wayland(shell);
|
||||||
@ -135,7 +129,7 @@ DiyaIdleNotification* diya_shell_get_idle_notification(DiyaShell* shell, guint t
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
guint diya_shell_notification_get_timeout(DiyaIdleNotification* self)
|
guint diya_idle_notification_get_timeout(DiyaIdleNotification* self)
|
||||||
{
|
{
|
||||||
return self->timeout;
|
return self->timeout;
|
||||||
}
|
}
|
@ -13,5 +13,5 @@ USE_CLASS(DiyaShell);
|
|||||||
|
|
||||||
void diya_idle_manager_register(gpointer mngr, DiyaShell *shell);
|
void diya_idle_manager_register(gpointer mngr, DiyaShell *shell);
|
||||||
DiyaIdleNotification* diya_shell_get_idle_notification(DiyaShell* shell, guint timeout_ms);
|
DiyaIdleNotification* diya_shell_get_idle_notification(DiyaShell* shell, guint timeout_ms);
|
||||||
guint diya_shell_notification_get_timeout(DiyaIdleNotification* self);
|
guint diya_idle_notification_get_timeout(DiyaIdleNotification* self);
|
||||||
#endif /* DIYAC_IDLE_H */
|
#endif /* DIYAC_IDLE_H */
|
@ -237,6 +237,7 @@ DiyaInput *diya_input_new(DiyaShell *shell)
|
|||||||
DiyaWayland *wayland = diya_shell_get_wayland(shell);
|
DiyaWayland *wayland = diya_shell_get_wayland(shell);
|
||||||
assert(wayland);
|
assert(wayland);
|
||||||
struct wl_seat *seat = diya_wayland_get_seat(wayland);
|
struct wl_seat *seat = diya_wayland_get_seat(wayland);
|
||||||
|
assert(seat);
|
||||||
wl_seat_add_listener(seat, &wl_seat_listener, self);
|
wl_seat_add_listener(seat, &wl_seat_listener, self);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -296,6 +296,20 @@ static void on_monitor_changed(GListModel *monitor_lists, guint position, guint
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void diya_login_on_shell_idle(DiyaShell* shell)
|
||||||
|
{
|
||||||
|
(void) shell;
|
||||||
|
g_debug("diya_login_on_shell_idle");
|
||||||
|
diya_shell_power_display(shell, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void diya_login_on_shell_resume(DiyaShell* shell)
|
||||||
|
{
|
||||||
|
(void) shell;
|
||||||
|
g_debug("diya_login_on_shell_resume");
|
||||||
|
diya_shell_power_display(shell, true);
|
||||||
|
}
|
||||||
|
|
||||||
static void diya_login_shell_startup(DiyaShell *shell)
|
static void diya_login_shell_startup(DiyaShell *shell)
|
||||||
{
|
{
|
||||||
DiyaLoginShell *self = DIYA_LOGIN_SHELL(shell);
|
DiyaLoginShell *self = DIYA_LOGIN_SHELL(shell);
|
||||||
@ -311,6 +325,8 @@ static void diya_login_shell_startup(DiyaShell *shell)
|
|||||||
GdkMonitor *monitor = g_list_model_get_item(list, i);
|
GdkMonitor *monitor = g_list_model_get_item(list, i);
|
||||||
add_new_monitor(self, monitor, -1);
|
add_new_monitor(self, monitor, -1);
|
||||||
}
|
}
|
||||||
|
g_signal_connect(shell, DIYA_SIGNAL_SHELL_IDLE, G_CALLBACK(diya_login_on_shell_idle), NULL);
|
||||||
|
g_signal_connect(shell, DIYA_SIGNAL_SHELL_RESUME, G_CALLBACK(diya_login_on_shell_resume), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diya_login_shell_class_init(DiyaLoginShellClass *class)
|
static void diya_login_shell_class_init(DiyaLoginShellClass *class)
|
||||||
|
@ -29,7 +29,6 @@ struct _DiyaSessionShell
|
|||||||
DiyaLauncher *launcher;
|
DiyaLauncher *launcher;
|
||||||
GHashTable *windows;
|
GHashTable *windows;
|
||||||
GtkSessionLockInstance *lock;
|
GtkSessionLockInstance *lock;
|
||||||
DiyaIdleNotification* idle_notif;
|
|
||||||
};
|
};
|
||||||
G_DEFINE_FINAL_TYPE(DiyaSessionShell, diya_session_shell, DIYA_TYPE_SHELL)
|
G_DEFINE_FINAL_TYPE(DiyaSessionShell, diya_session_shell, DIYA_TYPE_SHELL)
|
||||||
|
|
||||||
@ -58,11 +57,6 @@ static void diya_session_shell_dispose(GObject *object)
|
|||||||
{
|
{
|
||||||
g_object_unref(self->launcher);
|
g_object_unref(self->launcher);
|
||||||
}
|
}
|
||||||
if (self->idle_notif)
|
|
||||||
{
|
|
||||||
g_object_unref(self->idle_notif);
|
|
||||||
self->idle_notif = NULL;
|
|
||||||
}
|
|
||||||
G_OBJECT_CLASS(diya_session_shell_parent_class)->dispose(object);
|
G_OBJECT_CLASS(diya_session_shell_parent_class)->dispose(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,18 +136,18 @@ static void diya_session_on_key_pressed(DiyaShell* shell, struct xkb_keymap *xkb
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diya_session_shell_idle(DiyaIdleNotification* notif, DiyaSessionShell* shell)
|
static void diya_session_on_shell_idle(DiyaShell* shell)
|
||||||
{
|
{
|
||||||
assert(DIYA_IS_IDLE_NOTIFICATION(notif));
|
(void) shell;
|
||||||
assert(DIYA_IS_SESSION_SHELL(shell));
|
g_debug("diya_session_on_shell_idle");
|
||||||
g_debug("Shell IDLE");
|
diya_shell_power_display(shell, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diya_session_shell_resume(DiyaIdleNotification* notif, DiyaSessionShell* shell)
|
static void diya_session_on_shell_resume(DiyaShell* shell)
|
||||||
{
|
{
|
||||||
assert(DIYA_IS_IDLE_NOTIFICATION(notif));
|
(void) shell;
|
||||||
assert(DIYA_IS_SESSION_SHELL(shell));
|
g_debug("diya_session_on_shell_resume");
|
||||||
g_critical("Shell RESUME");
|
diya_shell_power_display(shell, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diya_session_shell_startup(DiyaShell *shell)
|
static void diya_session_shell_startup(DiyaShell *shell)
|
||||||
@ -162,15 +156,8 @@ static void diya_session_shell_startup(DiyaShell *shell)
|
|||||||
diya_session_shell_init_background(self);
|
diya_session_shell_init_background(self);
|
||||||
diya_session_shell_launcher_init(self);
|
diya_session_shell_launcher_init(self);
|
||||||
g_signal_connect(shell, DIYA_SIGNAL_SHELL_KEY_PRESSED, G_CALLBACK(diya_session_on_key_pressed), NULL);
|
g_signal_connect(shell, DIYA_SIGNAL_SHELL_KEY_PRESSED, G_CALLBACK(diya_session_on_key_pressed), NULL);
|
||||||
|
g_signal_connect(shell, DIYA_SIGNAL_SHELL_IDLE, G_CALLBACK(diya_session_on_shell_idle), NULL);
|
||||||
/**
|
g_signal_connect(shell, DIYA_SIGNAL_SHELL_RESUME, G_CALLBACK(diya_session_on_shell_resume), NULL);
|
||||||
* TODO:
|
|
||||||
* - read timeout from setting
|
|
||||||
* - implement widget that handle idle (turn off display + lock)
|
|
||||||
*/
|
|
||||||
self->idle_notif = diya_shell_get_idle_notification(shell, 5000);
|
|
||||||
g_signal_connect(self->idle_notif, DIYA_SIGNAL_IDLE_NOTIF_IDLE, G_CALLBACK(diya_session_shell_idle), self);
|
|
||||||
g_signal_connect(self->idle_notif, DIYA_SIGNAL_IDLE_NOTIF_RESUME, G_CALLBACK(diya_session_shell_resume), self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diya_session_shell_active(DiyaShell *shell)
|
static void diya_session_shell_active(DiyaShell *shell)
|
||||||
@ -185,7 +172,6 @@ static void diya_session_shell_class_init(DiyaSessionShellClass *class)
|
|||||||
|
|
||||||
DiyaShellClass *base_shell_class = DIYA_SHELL_CLASS(class);
|
DiyaShellClass *base_shell_class = DIYA_SHELL_CLASS(class);
|
||||||
base_shell_class->foreign_register = diya_session_shell_foreign_toplevel_register;
|
base_shell_class->foreign_register = diya_session_shell_foreign_toplevel_register;
|
||||||
base_shell_class->idle_notifier_register = diya_idle_manager_register;
|
|
||||||
base_shell_class->startup_handle = diya_session_shell_startup;
|
base_shell_class->startup_handle = diya_session_shell_startup;
|
||||||
base_shell_class->active_handle = diya_session_shell_active;
|
base_shell_class->active_handle = diya_session_shell_active;
|
||||||
|
|
||||||
@ -297,7 +283,6 @@ static void diya_session_shell_init(DiyaSessionShell *self)
|
|||||||
self->background = NULL;
|
self->background = NULL;
|
||||||
self->launcher = NULL;
|
self->launcher = NULL;
|
||||||
self->lock = gtk_session_lock_instance_new();
|
self->lock = gtk_session_lock_instance_new();
|
||||||
self->idle_notif = NULL;
|
|
||||||
g_signal_connect(self->lock, "locked", G_CALLBACK(on_session_locked), self);
|
g_signal_connect(self->lock, "locked", G_CALLBACK(on_session_locked), self);
|
||||||
// g_signal_connect(lock, "failed", G_CALLBACK(failed), NULL);
|
// g_signal_connect(lock, "failed", G_CALLBACK(failed), NULL);
|
||||||
g_signal_connect(self->lock, "unlocked", G_CALLBACK(on_session_unlocked), self);
|
g_signal_connect(self->lock, "unlocked", G_CALLBACK(on_session_unlocked), self);
|
||||||
|
106
src/shell.c
106
src/shell.c
@ -4,6 +4,12 @@
|
|||||||
#include "virtual-keyboard.h"
|
#include "virtual-keyboard.h"
|
||||||
#include "files-monior.h"
|
#include "files-monior.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
#include "idle.h"
|
||||||
|
#include "wlr-output-power-management-unstable-v1.h"
|
||||||
|
#include <wayland-client-protocol.h>
|
||||||
|
#include <gdk/wayland/gdkwayland.h>
|
||||||
|
|
||||||
|
#define DEFAULT_IDLE_TIMEOUT 60*1000 // 1m
|
||||||
|
|
||||||
#define diya_shell_config_theme(priv) (g_strconcat(g_get_home_dir(), "/.themes/", priv->theme ? priv->theme : "default", "/gtk-4.0/gtk.css", NULL))
|
#define diya_shell_config_theme(priv) (g_strconcat(g_get_home_dir(), "/.themes/", priv->theme ? priv->theme : "default", "/gtk-4.0/gtk.css", NULL))
|
||||||
#define diya_shell_config_theme_dir(priv) (g_strconcat(g_get_home_dir(), "/.themes/", priv->theme ? priv->theme : "default", "/gtk-4.0", NULL))
|
#define diya_shell_config_theme_dir(priv) (g_strconcat(g_get_home_dir(), "/.themes/", priv->theme ? priv->theme : "default", "/gtk-4.0", NULL))
|
||||||
@ -14,6 +20,7 @@ enum
|
|||||||
PROP_SHELL_APP,
|
PROP_SHELL_APP,
|
||||||
PROP_SHELL_NAME,
|
PROP_SHELL_NAME,
|
||||||
PROP_SHELL_THEME,
|
PROP_SHELL_THEME,
|
||||||
|
PROP_SHELL_IDLE_TO,
|
||||||
N_PROPERTIES
|
N_PROPERTIES
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,6 +37,7 @@ typedef struct _DiyaShellPrivate
|
|||||||
DiyaInput *input;
|
DiyaInput *input;
|
||||||
DiyaFilesMonitor *files_watchdog;
|
DiyaFilesMonitor *files_watchdog;
|
||||||
gchar *theme;
|
gchar *theme;
|
||||||
|
DiyaIdleNotification *idle_notif;
|
||||||
} DiyaShellPrivate;
|
} DiyaShellPrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE(DiyaShell, diya_shell, DIYA_TYPE_OBJECT);
|
G_DEFINE_TYPE_WITH_PRIVATE(DiyaShell, diya_shell, DIYA_TYPE_OBJECT);
|
||||||
@ -75,6 +83,11 @@ static void diya_shell_dispose(GObject *object)
|
|||||||
g_object_unref(priv->files_watchdog);
|
g_object_unref(priv->files_watchdog);
|
||||||
priv->files_watchdog = NULL;
|
priv->files_watchdog = NULL;
|
||||||
}
|
}
|
||||||
|
if (priv->idle_notif)
|
||||||
|
{
|
||||||
|
g_object_unref(priv->idle_notif);
|
||||||
|
priv->idle_notif = NULL;
|
||||||
|
}
|
||||||
G_OBJECT_CLASS(diya_shell_parent_class)->dispose(object);
|
G_OBJECT_CLASS(diya_shell_parent_class)->dispose(object);
|
||||||
if (priv->app)
|
if (priv->app)
|
||||||
{
|
{
|
||||||
@ -153,6 +166,18 @@ void on_diya_shell_theme_file_changed(GFileMonitor *monitor, GFile *file, GFile
|
|||||||
g_free(fpath);
|
g_free(fpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void diya_shell_idle(DiyaIdleNotification *notif, DiyaShell *shell)
|
||||||
|
{
|
||||||
|
assert(DIYA_IS_IDLE_NOTIFICATION(notif));
|
||||||
|
g_signal_emit_by_name(shell, DIYA_SIGNAL_SHELL_IDLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void diya_shell_resume(DiyaIdleNotification *notif, DiyaShell *shell)
|
||||||
|
{
|
||||||
|
assert(DIYA_IS_IDLE_NOTIFICATION(notif));
|
||||||
|
g_signal_emit_by_name(shell, DIYA_SIGNAL_SHELL_RESUME);
|
||||||
|
}
|
||||||
|
|
||||||
static void on_gtk_app_startup(GtkApplication *app, void *data)
|
static void on_gtk_app_startup(GtkApplication *app, void *data)
|
||||||
{
|
{
|
||||||
(void)app;
|
(void)app;
|
||||||
@ -171,8 +196,8 @@ static void on_gtk_app_startup(GtkApplication *app, void *data)
|
|||||||
gchar *dir = diya_shell_config_theme_dir(priv);
|
gchar *dir = diya_shell_config_theme_dir(priv);
|
||||||
diya_shell_watch_file(shell, dir, G_CALLBACK(on_diya_shell_theme_file_changed), (gpointer)shell);
|
diya_shell_watch_file(shell, dir, G_CALLBACK(on_diya_shell_theme_file_changed), (gpointer)shell);
|
||||||
g_free(dir);
|
g_free(dir);
|
||||||
diya_shell_reload(shell);
|
|
||||||
|
|
||||||
|
diya_shell_reload(shell);
|
||||||
if (class->startup_handle)
|
if (class->startup_handle)
|
||||||
{
|
{
|
||||||
class->startup_handle(shell);
|
class->startup_handle(shell);
|
||||||
@ -190,6 +215,12 @@ static void on_gtk_app_active(GtkApplication *app, void *data)
|
|||||||
(void)app;
|
(void)app;
|
||||||
DiyaShell *shell = data;
|
DiyaShell *shell = data;
|
||||||
DiyaShellClass *class = DIYA_SHELL_GET_CLASS(shell);
|
DiyaShellClass *class = DIYA_SHELL_GET_CLASS(shell);
|
||||||
|
// DiyaShellPrivate *priv = diya_shell_get_instance_private(shell);
|
||||||
|
/**
|
||||||
|
* TODO: read timeout from setting
|
||||||
|
*/
|
||||||
|
g_object_set(shell, DIYA_PROP_SHELL_IDLE_TIMEOUT, DEFAULT_IDLE_TIMEOUT, NULL);
|
||||||
|
|
||||||
if (class->active_handle)
|
if (class->active_handle)
|
||||||
{
|
{
|
||||||
class->active_handle(shell);
|
class->active_handle(shell);
|
||||||
@ -243,6 +274,15 @@ static void diya_shell_set_property(GObject *object, guint property_id, const GV
|
|||||||
priv->name = g_strdup(g_value_get_string(value));
|
priv->name = g_strdup(g_value_get_string(value));
|
||||||
init_gtk_application(self);
|
init_gtk_application(self);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SHELL_IDLE_TO:
|
||||||
|
if(priv->idle_notif)
|
||||||
|
{
|
||||||
|
g_object_unref(priv->idle_notif);
|
||||||
|
}
|
||||||
|
priv->idle_notif = diya_shell_get_idle_notification(self, g_value_get_uint(value));
|
||||||
|
g_signal_connect(priv->idle_notif, DIYA_SIGNAL_IDLE_NOTIF_IDLE, G_CALLBACK(diya_shell_idle), self);
|
||||||
|
g_signal_connect(priv->idle_notif, DIYA_SIGNAL_IDLE_NOTIF_RESUME, G_CALLBACK(diya_shell_resume), self);
|
||||||
|
break;
|
||||||
case PROP_SHELL_THEME:
|
case PROP_SHELL_THEME:
|
||||||
{
|
{
|
||||||
const gchar *theme = g_value_get_string(value);
|
const gchar *theme = g_value_get_string(value);
|
||||||
@ -281,6 +321,16 @@ static void diya_shell_get_property(GObject *object, guint property_id, GValue *
|
|||||||
case PROP_SHELL_THEME:
|
case PROP_SHELL_THEME:
|
||||||
g_value_set_string(value, priv->theme);
|
g_value_set_string(value, priv->theme);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SHELL_IDLE_TO:
|
||||||
|
if(priv->idle_notif)
|
||||||
|
{
|
||||||
|
g_value_set_uint(value, diya_idle_notification_get_timeout(priv->idle_notif));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_value_set_uint(value, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -298,6 +348,7 @@ static void diya_shell_init(DiyaShell *self)
|
|||||||
priv->input = NULL;
|
priv->input = NULL;
|
||||||
priv->files_watchdog = NULL;
|
priv->files_watchdog = NULL;
|
||||||
priv->theme = NULL;
|
priv->theme = NULL;
|
||||||
|
priv->idle_notif = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
DiyaWayland *diya_shell_get_wayland(DiyaShell *shell)
|
DiyaWayland *diya_shell_get_wayland(DiyaShell *shell)
|
||||||
@ -338,7 +389,6 @@ static void diya_shell_class_init(DiyaShellClass *class)
|
|||||||
|
|
||||||
class->foreign_register = NULL;
|
class->foreign_register = NULL;
|
||||||
class->virtual_keyboard_register = diya_virtual_keyboard_register;
|
class->virtual_keyboard_register = diya_virtual_keyboard_register;
|
||||||
class->idle_notifier_register = NULL;
|
|
||||||
class->monitor_changed_handle = NULL;
|
class->monitor_changed_handle = NULL;
|
||||||
class->startup_handle = NULL;
|
class->startup_handle = NULL;
|
||||||
class->active_handle = NULL;
|
class->active_handle = NULL;
|
||||||
@ -348,7 +398,7 @@ static void diya_shell_class_init(DiyaShellClass *class)
|
|||||||
shell_properties[PROP_SHELL_NAME] = g_param_spec_string(DIYA_PROP_SHELL_NAME, NULL, "Shell name", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
shell_properties[PROP_SHELL_NAME] = g_param_spec_string(DIYA_PROP_SHELL_NAME, NULL, "Shell name", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||||
shell_properties[PROP_SHELL_APP] = g_param_spec_pointer(DIYA_PROP_SHELL_APPLICATION, NULL, "Shell application", G_PARAM_READABLE);
|
shell_properties[PROP_SHELL_APP] = g_param_spec_pointer(DIYA_PROP_SHELL_APPLICATION, NULL, "Shell application", G_PARAM_READABLE);
|
||||||
shell_properties[PROP_SHELL_THEME] = g_param_spec_string(DIYA_PROP_SHELL_THEME, NULL, "Shell theme", NULL, G_PARAM_READWRITE);
|
shell_properties[PROP_SHELL_THEME] = g_param_spec_string(DIYA_PROP_SHELL_THEME, NULL, "Shell theme", NULL, G_PARAM_READWRITE);
|
||||||
shell_properties[PROP_SHELL_APP] = g_param_spec_pointer(DIYA_PROP_SHELL_APPLICATION, NULL, "Shell application", G_PARAM_READABLE);
|
shell_properties[PROP_SHELL_IDLE_TO] = g_param_spec_uint(DIYA_PROP_SHELL_IDLE_TIMEOUT, NULL, "Shell IDLE timeout", 0, UINT32_MAX ,DEFAULT_IDLE_TIMEOUT, G_PARAM_READWRITE);
|
||||||
|
|
||||||
g_object_class_install_properties(gobject_class, N_PROPERTIES, shell_properties);
|
g_object_class_install_properties(gobject_class, N_PROPERTIES, shell_properties);
|
||||||
|
|
||||||
@ -422,12 +472,34 @@ static void diya_shell_class_init(DiyaShellClass *class)
|
|||||||
G_TYPE_POINTER,
|
G_TYPE_POINTER,
|
||||||
G_TYPE_UINT,
|
G_TYPE_UINT,
|
||||||
G_TYPE_UINT);
|
G_TYPE_UINT);
|
||||||
|
g_signal_new(DIYA_SIGNAL_SHELL_IDLE,
|
||||||
|
DIYA_TYPE_SHELL,
|
||||||
|
G_SIGNAL_DETAILED |
|
||||||
|
G_SIGNAL_ACTION |
|
||||||
|
G_SIGNAL_RUN_FIRST,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
G_TYPE_NONE,
|
||||||
|
0);
|
||||||
|
g_signal_new(DIYA_SIGNAL_SHELL_RESUME,
|
||||||
|
DIYA_TYPE_SHELL,
|
||||||
|
G_SIGNAL_DETAILED |
|
||||||
|
G_SIGNAL_ACTION |
|
||||||
|
G_SIGNAL_RUN_FIRST,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
G_TYPE_NONE,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int diya_shell_handle_local_options(GApplication *application, GVariantDict *options, gpointer user_data)
|
static int diya_shell_handle_local_options(GApplication *application, GVariantDict *options, gpointer user_data)
|
||||||
{
|
{
|
||||||
(void) application;
|
(void)application;
|
||||||
(void) user_data;
|
(void)user_data;
|
||||||
#ifdef __SHELL_VERSION__
|
#ifdef __SHELL_VERSION__
|
||||||
guint32 count;
|
guint32 count;
|
||||||
if (g_variant_dict_lookup(options, "version", "b", &count))
|
if (g_variant_dict_lookup(options, "version", "b", &count))
|
||||||
@ -526,7 +598,6 @@ void diya_shell_monitor_input(DiyaShell *self)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
priv->input = diya_input_new(self);
|
priv->input = diya_input_new(self);
|
||||||
// TODO mapping signals
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean diya_shell_watch_file(DiyaShell *self, const gchar *file, GCallback callback, gpointer userdata)
|
gboolean diya_shell_watch_file(DiyaShell *self, const gchar *file, GCallback callback, gpointer userdata)
|
||||||
@ -565,4 +636,27 @@ void diya_shell_launch(DiyaShell *self, GAppInfo *app)
|
|||||||
g_error_free(error);
|
g_error_free(error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void diya_shell_power_display(DiyaShell* self, gboolean mode)
|
||||||
|
{
|
||||||
|
DiyaShellPrivate *priv = diya_shell_get_instance_private(self);
|
||||||
|
struct zwlr_output_power_manager_v1 * mngr = diya_wayland_get_output_mngr(priv->wayland);
|
||||||
|
if(!mngr)
|
||||||
|
{
|
||||||
|
g_warning("Output power manager protocol is not available");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GdkDisplay *display = gdk_display_get_default();
|
||||||
|
GListModel *monitors = gdk_display_get_monitors(display);
|
||||||
|
guint n_monitors = g_list_model_get_n_items(monitors);
|
||||||
|
|
||||||
|
for (guint i = 0; i < n_monitors; ++i)
|
||||||
|
{
|
||||||
|
GdkMonitor *monitor = g_list_model_get_item(monitors, i);
|
||||||
|
struct wl_output * output = gdk_wayland_monitor_get_wl_output(monitor);
|
||||||
|
struct zwlr_output_power_v1 * output_power = zwlr_output_power_manager_v1_get_output_power(mngr, output);
|
||||||
|
zwlr_output_power_v1_set_mode(output_power, mode? ZWLR_OUTPUT_POWER_V1_MODE_ON: ZWLR_OUTPUT_POWER_V1_MODE_OFF);
|
||||||
|
zwlr_output_power_v1_destroy(output_power);
|
||||||
|
}
|
||||||
}
|
}
|
@ -11,6 +11,7 @@
|
|||||||
#define DIYA_PROP_SHELL_NAME "name"
|
#define DIYA_PROP_SHELL_NAME "name"
|
||||||
#define DIYA_PROP_SHELL_APPLICATION "application"
|
#define DIYA_PROP_SHELL_APPLICATION "application"
|
||||||
#define DIYA_PROP_SHELL_THEME "theme"
|
#define DIYA_PROP_SHELL_THEME "theme"
|
||||||
|
#define DIYA_PROP_SHELL_IDLE_TIMEOUT "idle-timeout"
|
||||||
|
|
||||||
|
|
||||||
#define DIYA_SIGNAL_SHELL_KEYBOARD_ENTER "keyboard-enter"
|
#define DIYA_SIGNAL_SHELL_KEYBOARD_ENTER "keyboard-enter"
|
||||||
@ -18,6 +19,8 @@
|
|||||||
#define DIYA_SIGNAL_SHELL_KEY_PRESSED "key-pressed"
|
#define DIYA_SIGNAL_SHELL_KEY_PRESSED "key-pressed"
|
||||||
#define DIYA_SIGNAL_SHELL_KEY_RELEASED "key-released"
|
#define DIYA_SIGNAL_SHELL_KEY_RELEASED "key-released"
|
||||||
#define DIYA_SIGNAL_SHELL_KEYBOARD_MODIFIER_CHANGED "keyboard-modifier-changed"
|
#define DIYA_SIGNAL_SHELL_KEYBOARD_MODIFIER_CHANGED "keyboard-modifier-changed"
|
||||||
|
#define DIYA_SIGNAL_SHELL_IDLE "idle"
|
||||||
|
#define DIYA_SIGNAL_SHELL_RESUME "resume"
|
||||||
|
|
||||||
#define DIYA_TYPE_SHELL (diya_shell_get_type())
|
#define DIYA_TYPE_SHELL (diya_shell_get_type())
|
||||||
G_DECLARE_DERIVABLE_TYPE(DiyaShell, diya_shell, DIYA, SHELL, DiyaObject)
|
G_DECLARE_DERIVABLE_TYPE(DiyaShell, diya_shell, DIYA, SHELL, DiyaObject)
|
||||||
@ -31,7 +34,6 @@ struct _DiyaShellClass
|
|||||||
DiyaObjectClass parent_class;
|
DiyaObjectClass parent_class;
|
||||||
wl_protocol_manager_register_t foreign_register;
|
wl_protocol_manager_register_t foreign_register;
|
||||||
wl_protocol_manager_register_t virtual_keyboard_register;
|
wl_protocol_manager_register_t virtual_keyboard_register;
|
||||||
wl_protocol_manager_register_t idle_notifier_register;
|
|
||||||
void (*monitor_changed_handle)(GListModel* /*list*/,guint /*position*/, guint /*removed*/,guint /*added*/, gpointer);
|
void (*monitor_changed_handle)(GListModel* /*list*/,guint /*position*/, guint /*removed*/,guint /*added*/, gpointer);
|
||||||
void (*startup_handle)(DiyaShell*);
|
void (*startup_handle)(DiyaShell*);
|
||||||
void (*active_handle)(DiyaShell*);
|
void (*active_handle)(DiyaShell*);
|
||||||
@ -48,6 +50,7 @@ DiyaVirtualKeyboard* diya_shell_get_virtual_keyboard(DiyaShell* shell, const gch
|
|||||||
void diya_shell_monitor_input(DiyaShell* shell);
|
void diya_shell_monitor_input(DiyaShell* shell);
|
||||||
gboolean diya_shell_watch_file(DiyaShell* shell, const gchar* file, GCallback callback, gpointer userdata);
|
gboolean diya_shell_watch_file(DiyaShell* shell, const gchar* file, GCallback callback, gpointer userdata);
|
||||||
void diya_shell_unwatch_file(DiyaShell* shell, const gchar* file);
|
void diya_shell_unwatch_file(DiyaShell* shell, const gchar* file);
|
||||||
|
void diya_shell_power_display(DiyaShell* shell, gboolean mode);
|
||||||
void diya_shell_launch(DiyaShell* shell, GAppInfo* app);
|
void diya_shell_launch(DiyaShell* shell, GAppInfo* app);
|
||||||
|
|
||||||
int diya_shell_run(DiyaShell* shell, int argc, char **argv);
|
int diya_shell_run(DiyaShell* shell, int argc, char **argv);
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "wlr-foreign-toplevel-management-unstable-v1.h"
|
#include "wlr-foreign-toplevel-management-unstable-v1.h"
|
||||||
#include "virtual-keyboard-unstable-v1.h"
|
#include "virtual-keyboard-unstable-v1.h"
|
||||||
#include "ext-idle-notify-v1.h"
|
#include "ext-idle-notify-v1.h"
|
||||||
|
#include "wlr-output-power-management-unstable-v1.h"
|
||||||
#include "wayland.h"
|
#include "wayland.h"
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
|
|
||||||
@ -17,6 +18,7 @@ struct _DiyaWayland
|
|||||||
struct zwlr_foreign_toplevel_manager_v1 * foreign_toplevel_mngr;
|
struct zwlr_foreign_toplevel_manager_v1 * foreign_toplevel_mngr;
|
||||||
struct zwp_virtual_keyboard_manager_v1 * virtual_keyboard_mngr;
|
struct zwp_virtual_keyboard_manager_v1 * virtual_keyboard_mngr;
|
||||||
struct ext_idle_notifier_v1 * idle_notifier_mngr;
|
struct ext_idle_notifier_v1 * idle_notifier_mngr;
|
||||||
|
struct zwlr_output_power_manager_v1 * zwlr_output_power_manager_v1;
|
||||||
};
|
};
|
||||||
G_DEFINE_FINAL_TYPE(DiyaWayland, diya_wayland, DIYA_TYPE_SHELL_OBJECT)
|
G_DEFINE_FINAL_TYPE(DiyaWayland, diya_wayland, DIYA_TYPE_SHELL_OBJECT)
|
||||||
|
|
||||||
@ -39,6 +41,11 @@ static void diya_wayland_finalize(GObject* object)
|
|||||||
ext_idle_notifier_v1_destroy(self->idle_notifier_mngr);
|
ext_idle_notifier_v1_destroy(self->idle_notifier_mngr);
|
||||||
self->idle_notifier_mngr = NULL;
|
self->idle_notifier_mngr = NULL;
|
||||||
}
|
}
|
||||||
|
if(self->zwlr_output_power_manager_v1)
|
||||||
|
{
|
||||||
|
zwlr_output_power_manager_v1_destroy(self->zwlr_output_power_manager_v1);
|
||||||
|
self->zwlr_output_power_manager_v1 = NULL;
|
||||||
|
}
|
||||||
g_debug("diya_wayland_finalize: %s", diya_object_to_string(object));
|
g_debug("diya_wayland_finalize: %s", diya_object_to_string(object));
|
||||||
G_OBJECT_CLASS(diya_wayland_parent_class)->finalize(object);
|
G_OBJECT_CLASS(diya_wayland_parent_class)->finalize(object);
|
||||||
}
|
}
|
||||||
@ -59,6 +66,7 @@ static void diya_wayland_init(DiyaWayland * self)
|
|||||||
self->foreign_toplevel_mngr = NULL;
|
self->foreign_toplevel_mngr = NULL;
|
||||||
self->virtual_keyboard_mngr = NULL;
|
self->virtual_keyboard_mngr = NULL;
|
||||||
self->idle_notifier_mngr = NULL;
|
self->idle_notifier_mngr = NULL;
|
||||||
|
self->zwlr_output_power_manager_v1 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar* diya_wayland_to_string(DiyaObject* object)
|
static const gchar* diya_wayland_to_string(DiyaObject* object)
|
||||||
@ -92,14 +100,15 @@ static void handle_global(void *data, struct wl_registry *registry, uint32_t nam
|
|||||||
foreign_toplevel_register(registry,name);
|
foreign_toplevel_register(registry,name);
|
||||||
*/
|
*/
|
||||||
(void) version;
|
(void) version;
|
||||||
DiyaShell * shell = data;
|
DiyaWayland *wayland = data;
|
||||||
DiyaShellClass * class = DIYA_SHELL_GET_CLASS(shell);
|
DiyaShell * shell = diya_shell_object_get_shell(data);
|
||||||
DiyaWayland * wayland;
|
|
||||||
g_object_get(shell, DIYA_PROP_SHELL_WAYLAND, &wayland, NULL);
|
|
||||||
assert(DIYA_IS_WAYLAND(wayland));
|
assert(DIYA_IS_WAYLAND(wayland));
|
||||||
g_debug("WAYLAND GLOBAL: %s", interface);
|
assert(DIYA_IS_SHELL(shell));
|
||||||
|
|
||||||
if (g_strcmp0(interface, zwlr_foreign_toplevel_manager_v1_interface.name) == 0)
|
DiyaShellClass * class = DIYA_SHELL_GET_CLASS(shell);
|
||||||
|
g_debug("WAYLAND GLOBAL: %s", interface);
|
||||||
|
if (!wayland->foreign_toplevel_mngr && g_strcmp0(interface, zwlr_foreign_toplevel_manager_v1_interface.name) == 0)
|
||||||
{
|
{
|
||||||
if(class->foreign_register)
|
if(class->foreign_register)
|
||||||
{
|
{
|
||||||
@ -109,7 +118,7 @@ static void handle_global(void *data, struct wl_registry *registry, uint32_t nam
|
|||||||
class->foreign_register(wayland->foreign_toplevel_mngr, shell);
|
class->foreign_register(wayland->foreign_toplevel_mngr, shell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (g_strcmp0(interface, zwp_virtual_keyboard_manager_v1_interface.name) == 0)
|
if (!wayland->virtual_keyboard_mngr && g_strcmp0(interface, zwp_virtual_keyboard_manager_v1_interface.name) == 0)
|
||||||
{
|
{
|
||||||
if(class->virtual_keyboard_register)
|
if(class->virtual_keyboard_register)
|
||||||
{
|
{
|
||||||
@ -125,26 +134,28 @@ static void handle_global(void *data, struct wl_registry *registry, uint32_t nam
|
|||||||
diya_session_shell_session_lock_register(registry, name);
|
diya_session_shell_session_lock_register(registry, name);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
else if (g_strcmp0(interface, wl_compositor_interface.name) == 0)
|
else if (!wayland->compositor && g_strcmp0(interface, wl_compositor_interface.name) == 0)
|
||||||
{
|
{
|
||||||
wayland->compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 4);
|
wayland->compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 4);
|
||||||
}
|
}
|
||||||
else if (g_strcmp0(interface, wl_shm_interface.name) == 0)
|
else if (!wayland->shm && g_strcmp0(interface, wl_shm_interface.name) == 0)
|
||||||
{
|
{
|
||||||
wayland->shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
|
wayland->shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
|
||||||
}
|
}
|
||||||
else if (g_strcmp0(interface, wl_seat_interface.name) == 0)
|
else if (!wayland->seat && g_strcmp0(interface, wl_seat_interface.name) == 0)
|
||||||
{
|
{
|
||||||
wayland->seat = wl_registry_bind(registry, name, &wl_seat_interface, 7);
|
wayland->seat = wl_registry_bind(registry, name, &wl_seat_interface, 7);
|
||||||
}
|
}
|
||||||
else if(g_strcmp0(interface, ext_idle_notifier_v1_interface.name) == 0)
|
else if(!wayland->idle_notifier_mngr && g_strcmp0(interface, ext_idle_notifier_v1_interface.name) == 0)
|
||||||
{
|
{
|
||||||
if(class->idle_notifier_register)
|
g_debug("Wayland: register ext_idle_notifier_v1_interface");
|
||||||
{
|
wayland->idle_notifier_mngr = wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, 1);;
|
||||||
g_debug("Wayland: register ext_idle_notifier_v1_interface");
|
}
|
||||||
wayland->idle_notifier_mngr = wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, 1);;
|
else if (!wayland->zwlr_output_power_manager_v1 && g_strcmp0(interface, zwlr_output_power_manager_v1_interface.name) == 0)
|
||||||
class->idle_notifier_register(wayland->idle_notifier_mngr, shell);
|
{
|
||||||
}
|
g_debug("Wayland: register zwlr_output_power_manager_v1_interface");
|
||||||
|
wayland->zwlr_output_power_manager_v1 = wl_registry_bind(registry, name, &zwlr_output_power_manager_v1_interface, 1);
|
||||||
|
//class->power_manager_register(wayland->zwlr_output_power_manager_v1, shell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,16 +183,15 @@ DiyaWayland* diya_wayland_new(DiyaShell *shell)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
DiyaWayland * wayland = g_object_new(DIYA_TYPE_WAYLAND, "shell", shell, NULL);
|
DiyaWayland * wayland = g_object_new(DIYA_TYPE_WAYLAND, "shell", shell, NULL);
|
||||||
//g_object_set(wayland, "shell", shell, NULL);
|
|
||||||
registry = wl_display_get_registry(display);
|
registry = wl_display_get_registry(display);
|
||||||
wl_registry_add_listener(registry, ®istry_listener, (void*)shell);
|
wl_registry_add_listener(registry, ®istry_listener, (void*)wayland);
|
||||||
// wl_display_roundtrip(display);
|
// wl_display_roundtrip(display);
|
||||||
// wayland_monitor_probe();
|
// wayland_monitor_probe();
|
||||||
// GdkMonitor *mon = wayland_monitor_get_default();
|
// GdkMonitor *mon = wayland_monitor_get_default();
|
||||||
// g_info("default output: %s", (gchar *)g_object_get_data(G_OBJECT(mon), "xdg_name"));
|
// g_info("default output: %s", (gchar *)g_object_get_data(G_OBJECT(mon), "xdg_name"));
|
||||||
|
|
||||||
// wl_display_roundtrip(display);
|
// wl_display_roundtrip(display);
|
||||||
// wl_display_roundtrip(display);
|
//wl_display_roundtrip(display);
|
||||||
return wayland;
|
return wayland;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,4 +239,9 @@ struct zwp_virtual_keyboard_manager_v1* diya_wayland_get_virtual_keyboard_mngr(D
|
|||||||
struct ext_idle_notifier_v1* diya_wayland_get_idle_mngr(DiyaWayland* self)
|
struct ext_idle_notifier_v1* diya_wayland_get_idle_mngr(DiyaWayland* self)
|
||||||
{
|
{
|
||||||
return self->idle_notifier_mngr;
|
return self->idle_notifier_mngr;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct zwlr_output_power_manager_v1 * diya_wayland_get_output_mngr(DiyaWayland* self)
|
||||||
|
{
|
||||||
|
return self->zwlr_output_power_manager_v1;
|
||||||
}
|
}
|
@ -14,5 +14,6 @@ struct wl_shm_pool * diya_wayland_create_shm_pool(DiyaWayland * self, int fd, gu
|
|||||||
struct wl_seat* diya_wayland_get_seat(DiyaWayland* self);
|
struct wl_seat* diya_wayland_get_seat(DiyaWayland* self);
|
||||||
struct zwp_virtual_keyboard_manager_v1* diya_wayland_get_virtual_keyboard_mngr(DiyaWayland* self);
|
struct zwp_virtual_keyboard_manager_v1* diya_wayland_get_virtual_keyboard_mngr(DiyaWayland* self);
|
||||||
struct ext_idle_notifier_v1* diya_wayland_get_idle_mngr(DiyaWayland* self);
|
struct ext_idle_notifier_v1* diya_wayland_get_idle_mngr(DiyaWayland* self);
|
||||||
|
struct zwlr_output_power_manager_v1 * diya_wayland_get_output_mngr(DiyaWayland* self);
|
||||||
DiyaWayland* diya_wayland_new(DiyaShell *shell);
|
DiyaWayland* diya_wayland_new(DiyaShell *shell);
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user