diff --git a/src/foreign.c b/src/foreign.c index db4ad32..8716ba1 100644 --- a/src/foreign.c +++ b/src/foreign.c @@ -221,7 +221,7 @@ static void toplevel_handle_done(void *data, assert(shell); DiyaForeignWindow *win = diya_session_shell_get_window(shell, handle); assert(win); - g_signal_emit_by_name(shell, "foreign-window-changed", (void *)win); + g_signal_emit_by_name(shell, DIYA_SIGNAL_FOREIGN_WINDOW_CHANGED, (void *)win); } static void toplevel_handle_closed(void *data, struct zwlr_foreign_toplevel_handle_v1 *handle) @@ -230,7 +230,7 @@ static void toplevel_handle_closed(void *data, assert(shell); DiyaForeignWindow *win = diya_session_shell_get_window(shell, handle); assert(win); - g_signal_emit_by_name(shell, "foreign-window-removed", (void *)win); + g_signal_emit_by_name(shell, DIYA_SIGNAL_FOREIGN_WINDOW_REMOVED, (void *)win); diya_session_shell_remove_window(shell, win); zwlr_foreign_toplevel_handle_v1_destroy(handle); } diff --git a/src/input.c b/src/input.c index b427adc..793aaac 100644 --- a/src/input.c +++ b/src/input.c @@ -91,11 +91,64 @@ static void diya_input_class_init(DiyaInputClass *class) // gobject_class->set_property = diya_input_set_property; // gobject_class->get_property = diya_input_get_property; base_class->to_string = diya_input_to_string; + + g_signal_new(DIYA_SIGNAL_INPUT_KEYBOARD_ENTER, + DIYA_TYPE_SHELL, + G_SIGNAL_DETAILED | + G_SIGNAL_ACTION | + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + NULL, + G_TYPE_NONE, + 1, + G_TYPE_POINTER); + g_signal_new(DIYA_SIGNAL_INPUT_KEYBOARD_LEAVE, + 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_INPUT_KEY_PRESSED, + DIYA_TYPE_SHELL, + G_SIGNAL_DETAILED | + G_SIGNAL_ACTION | + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + NULL, + G_TYPE_NONE, + 3, + G_TYPE_UINT, + G_TYPE_UINT, + G_TYPE_UINT); + + g_signal_new(DIYA_SIGNAL_INPUT_KEY_RELEASED, + DIYA_TYPE_SHELL, + G_SIGNAL_DETAILED | + G_SIGNAL_ACTION | + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + NULL, + G_TYPE_NONE, + 3, + G_TYPE_UINT, + G_TYPE_UINT, + G_TYPE_UINT); } static void wl_keyboard_keymap(void *data, struct wl_keyboard *keyboard, uint32_t format, int32_t fd, uint32_t size) { - (void) keyboard; + (void)keyboard; DiyaInput *self = data; assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); @@ -115,9 +168,9 @@ static void wl_keyboard_enter(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct wl_surface *surface, struct wl_array *keys) { - (void) keyboard; - (void) serial; - (void) surface; + (void)keyboard; + (void)serial; + (void)surface; DiyaInput *self = data; g_warning("keyboard enter; keys pressed are:"); uint32_t *key; @@ -135,9 +188,9 @@ static void wl_keyboard_enter(void *data, struct wl_keyboard *keyboard, static void wl_keyboard_key(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t state) { - (void) keyboard; - (void) serial; - (void) time; + (void)keyboard; + (void)serial; + (void)time; DiyaInput *self = data; char buf[128]; uint32_t keycode = key + 8; @@ -152,10 +205,10 @@ static void wl_keyboard_key(void *data, struct wl_keyboard *keyboard, static void wl_keyboard_leave(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct wl_surface *surface) { - (void) data; - (void) keyboard; - (void) serial; - (void) surface; + (void)data; + (void)keyboard; + (void)serial; + (void)surface; g_warning("keyboard leave"); } @@ -164,18 +217,18 @@ static void wl_keyboard_modifiers(void *data, struct wl_keyboard *keyboard, uint32_t mods_latched, uint32_t mods_locked, uint32_t group) { - (void) keyboard; - (void) serial; + (void)keyboard; + (void)serial; DiyaInput *self = data; - xkb_state_update_mask(self->xkb_state,mods_depressed, mods_latched, mods_locked, 0, 0, group); + xkb_state_update_mask(self->xkb_state, mods_depressed, mods_latched, mods_locked, 0, 0, group); } -static void wl_keyboard_repeat_info(void *data, struct wl_keyboard *keyboard,int32_t rate, int32_t delay) +static void wl_keyboard_repeat_info(void *data, struct wl_keyboard *keyboard, int32_t rate, int32_t delay) { - (void) data; - (void) keyboard; - (void) rate; - (void) delay; + (void)data; + (void)keyboard; + (void)rate; + (void)delay; } static const struct wl_keyboard_listener wl_keyboard_listener = { @@ -206,7 +259,7 @@ static void wl_seat_capabilities(void *data, struct wl_seat *seat, uint32_t capa static void wl_seat_name(void *data, struct wl_seat *seat, const char *name) { - (void) seat; + (void)seat; DiyaInput *self = data; if (self->name) { diff --git a/src/input.h b/src/input.h index ee0d7d1..0ebd706 100644 --- a/src/input.h +++ b/src/input.h @@ -3,6 +3,11 @@ #include "shell.h" +#define DIYA_SIGNAL_INPUT_KEYBOARD_ENTER "keyboard-enter" +#define DIYA_SIGNAL_INPUT_KEYBOARD_LEAVE "keyboard-leave" +#define DIYA_SIGNAL_INPUT_KEY_PRESSED "key-pressed" +#define DIYA_SIGNAL_INPUT_KEY_RELEASED "key-released" + #define DIYA_TYPE_INPUT (diya_input_get_type ()) G_DECLARE_FINAL_TYPE (DiyaInput, diya_input, DIYA, INPUT, DiyaShellObject) diff --git a/src/launcher.c b/src/launcher.c index 894245d..e2395f8 100644 --- a/src/launcher.c +++ b/src/launcher.c @@ -186,8 +186,8 @@ void diya_session_shell_launcher_init(DiyaSessionShell * shell) gtk_window_present (GTK_WINDOW (taskbar)); - g_signal_connect (shell, "foreign-window-changed", G_CALLBACK (on_foreign_window_change), NULL); - g_signal_connect (shell, "foreign-window-removed", G_CALLBACK (on_foreign_window_removed), NULL); + g_signal_connect (shell, DIYA_SIGNAL_FOREIGN_WINDOW_CHANGED, G_CALLBACK (on_foreign_window_change), NULL); + g_signal_connect (shell, DIYA_SIGNAL_FOREIGN_WINDOW_REMOVED, G_CALLBACK (on_foreign_window_removed), NULL); GList *apps = g_app_info_get_all (); GList * l; diff --git a/src/session-shell.c b/src/session-shell.c index 5c31dc8..72a69d0 100644 --- a/src/session-shell.c +++ b/src/session-shell.c @@ -103,6 +103,7 @@ static void diya_session_shell_startup(DiyaShell* shell) static void diya_session_shell_active(DiyaShell* shell) { + //(void) shell; diya_shell_monitor_input(shell); } @@ -128,7 +129,7 @@ static void diya_session_shell_class_init(DiyaSessionShellClass *class) g_object_class_install_properties (gobject_class, N_PROPERTIES, shell_properties); - g_signal_new("foreign-window-changed", + g_signal_new(DIYA_SIGNAL_FOREIGN_WINDOW_CHANGED, DIYA_TYPE_SESSION_SHELL, G_SIGNAL_DETAILED | G_SIGNAL_ACTION | @@ -140,7 +141,7 @@ static void diya_session_shell_class_init(DiyaSessionShellClass *class) G_TYPE_NONE, 1, G_TYPE_POINTER); - g_signal_new("foreign-window-removed", + g_signal_new(DIYA_SIGNAL_FOREIGN_WINDOW_REMOVED, DIYA_TYPE_SESSION_SHELL, G_SIGNAL_DETAILED | G_SIGNAL_ACTION | @@ -152,7 +153,7 @@ static void diya_session_shell_class_init(DiyaSessionShellClass *class) G_TYPE_NONE, 1, G_TYPE_POINTER); - g_signal_new("session-locked", + g_signal_new(DIYA_SIGNAL_SESSION_LOCKED, DIYA_TYPE_SESSION_SHELL, G_SIGNAL_DETAILED | G_SIGNAL_ACTION | @@ -163,7 +164,7 @@ static void diya_session_shell_class_init(DiyaSessionShellClass *class) NULL, G_TYPE_NONE, 0); - g_signal_new("session-unlocked", + g_signal_new(DIYA_SIGNAL_SESSION_UNLOCKED, DIYA_TYPE_SESSION_SHELL, G_SIGNAL_DETAILED | G_SIGNAL_ACTION | @@ -180,24 +181,14 @@ static void on_session_locked(GtkSessionLockInstance *lock, DiyaSessionShell *sh (void)lock; assert(shell); g_message("Session locked successfully"); - g_signal_emit_by_name(shell, "session-locked"); + g_signal_emit_by_name(shell, DIYA_SIGNAL_SESSION_LOCKED); } -/* -static void failed(GtkSessionLockInstance *lock, void *data) { - (void)lock; - (void)data; - - g_critical("The session could not be locked"); - g_application_quit(G_APPLICATION(app)); -} -*/ - static void on_session_unlocked(GtkSessionLockInstance *lock, DiyaSessionShell *shell) { (void)lock; assert(shell); g_message("Session unlocked"); - g_signal_emit_by_name(shell, "session-unlocked"); + g_signal_emit_by_name(shell, DIYA_SIGNAL_SESSION_UNLOCKED); } static void diya_session_shell_init(DiyaSessionShell *self) diff --git a/src/session-shell.h b/src/session-shell.h index 009611e..1d8bb80 100644 --- a/src/session-shell.h +++ b/src/session-shell.h @@ -5,6 +5,11 @@ #include "shell.h" #include "base.h" +#define DIYA_SIGNAL_FOREIGN_WINDOW_CHANGED "foreign-window-changed" +#define DIYA_SIGNAL_FOREIGN_WINDOW_REMOVED "foreign-window-removed" +#define DIYA_SIGNAL_SESSION_LOCKED "session-locked" +#define DIYA_SIGNAL_SESSION_UNLOCKED "session-unlocked" + #define DIYA_TYPE_SESSION_SHELL (diya_session_shell_get_type ()) G_DECLARE_FINAL_TYPE (DiyaSessionShell, diya_session_shell, DIYA, SESSION_SHELL, DiyaShell) diff --git a/src/session.c b/src/session.c index 67d143c..e74ce15 100644 --- a/src/session.c +++ b/src/session.c @@ -19,7 +19,7 @@ static void session_unlocked(DiyaSessionShell* shell, void* data) int main(int argc, char *argv[]) { DiyaSessionShell *shell = DIYA_SESSION_SHELL(g_object_new(DIYA_TYPE_SESSION_SHELL, "name","dev.iohub.diya.session-shell", NULL)); - g_signal_connect(shell, "session-locked", G_CALLBACK(session_locked), NULL); - g_signal_connect(shell, "session-unlocked", G_CALLBACK(session_unlocked), NULL); + g_signal_connect(shell, DIYA_SIGNAL_SESSION_LOCKED, G_CALLBACK(session_locked), NULL); + g_signal_connect(shell, DIYA_SIGNAL_SESSION_UNLOCKED, G_CALLBACK(session_unlocked), NULL); return diya_shell_run(DIYA_SHELL(shell), argc, argv); } diff --git a/src/shell.c b/src/shell.c index 53d4a83..711d499 100644 --- a/src/shell.c +++ b/src/shell.c @@ -5,7 +5,7 @@ #include "input.h" #include "files-monior.h" -#define diya_shell_config_css_file(priv) (g_strconcat(g_get_user_config_dir(), "/diya/themes/", priv->theme?priv->theme:"default", "/", priv->name, ".css", NULL)) +#define diya_shell_config_css_file(priv) (g_strconcat(g_get_user_config_dir(), "/diya/themes/", priv->theme ? priv->theme : "default", "/", priv->name, ".css", NULL)) enum { @@ -48,7 +48,7 @@ static void diya_shell_dispose(GObject *object) g_free(priv->name); priv->name = NULL; } - if(priv->theme) + if (priv->theme) { g_free(priv->theme); priv->name = NULL; @@ -131,7 +131,7 @@ static void diya_shell_reload_theme(DiyaShell *shell) } } -void diya_shell_reload(DiyaShell* self) +void diya_shell_reload(DiyaShell *self) { diya_shell_reload_theme(self); } @@ -154,8 +154,8 @@ void on_diya_shell_theme_file_changed(GFileMonitor *monitor, GFile *file, GFile case G_FILE_MONITOR_EVENT_RENAMED: case G_FILE_MONITOR_EVENT_MOVED_IN: case G_FILE_MONITOR_EVENT_MOVED_OUT: - //case G_FILE_MONITOR_EVENT_CHANGED: - //case G_FILE_MONITOR_EVENT_CREATED: + // case G_FILE_MONITOR_EVENT_CHANGED: + // case G_FILE_MONITOR_EVENT_CREATED: diya_shell_reload_theme(shell); break; default: @@ -177,8 +177,8 @@ static void on_gtk_app_startup(GtkApplication *app, void *data) DiyaShellClass *class = DIYA_SHELL_GET_CLASS(shell); // read envar - const char* default_theme = g_getenv(DIYA_ENV_THEME); - if(default_theme) + const char *default_theme = g_getenv(DIYA_ENV_THEME); + if (default_theme) { priv->theme = g_strdup(default_theme); } @@ -260,10 +260,10 @@ static void diya_shell_set_property(GObject *object, guint property_id, const GV break; case PROP_SHELL_THEME: { - const gchar* theme = g_value_get_string(value); - if(!priv->theme || !g_str_equal(priv->theme, theme)) + const gchar *theme = g_value_get_string(value); + if (!priv->theme || !g_str_equal(priv->theme, theme)) { - if(priv->theme) + if (priv->theme) { g_free(priv->theme); } @@ -374,13 +374,13 @@ int diya_shell_run(DiyaShell *shell, int argc, char **argv) * create shell config dir if not exists */ // theme dir - gchar* path = g_strconcat(g_get_user_config_dir(), "/diya/themes/", NULL); - g_mkdir_with_parents((const gchar*)path,0755); + gchar *path = g_strconcat(g_get_user_config_dir(), "/diya/themes/", NULL); + g_mkdir_with_parents((const gchar *)path, 0755); g_free(path); - + // keymap dir path = g_strconcat(g_get_user_config_dir(), "/diya/xkb/", NULL); - g_mkdir_with_parents((const gchar*)path,0755); + g_mkdir_with_parents((const gchar *)path, 0755); g_free(path); int status = g_application_run(G_APPLICATION(app), argc, argv); diff --git a/src/virtual-keyboard.c b/src/virtual-keyboard.c index 0a6e70d..f06aa87 100644 --- a/src/virtual-keyboard.c +++ b/src/virtual-keyboard.c @@ -94,19 +94,6 @@ static void diya_vkb_key_class_init(DiyaVkbKeyClass *class) // gobject_class->set_property = diya_lock_session_set_property; // gobject_class->get_property = diya_lock_session_get_property; base_class->to_string = diya_vkb_key_to_string; - - g_signal_new("modifier-changed", - DIYA_TYPE_VIRTUAL_KEYBOARD, - G_SIGNAL_DETAILED | - G_SIGNAL_ACTION | - G_SIGNAL_RUN_FIRST, - 0, - NULL, - NULL, - NULL, - G_TYPE_NONE, - 0, - NULL); } const gchar *diya_vkb_key_get_keycap(DiyaVkbKey *key, uint32_t shift_level) @@ -205,6 +192,18 @@ static void diya_virtual_keyboard_class_init(DiyaVirtualKeyboardClass *class) // gobject_class->set_property = diya_lock_session_set_property; // gobject_class->get_property = diya_lock_session_get_property; base_class->to_string = diya_virtual_keyboard_to_string; + g_signal_new(DIYA_SIGNAL_VKB_MODIFIER_CHANGED, + DIYA_TYPE_VIRTUAL_KEYBOARD, + G_SIGNAL_DETAILED | + G_SIGNAL_ACTION | + G_SIGNAL_RUN_FIRST, + 0, + NULL, + NULL, + NULL, + G_TYPE_NONE, + 0, + NULL); } /* @@ -423,7 +422,7 @@ void diya_virtual_keyboard_send_key(DiyaVirtualKeyboard *self, DiyaVkbKey* key, } if(old_mods != self->key_mods) { - g_signal_emit_by_name(self,"modifier-changed", NULL); + g_signal_emit_by_name(self,DIYA_SIGNAL_VKB_MODIFIER_CHANGED, NULL); } } diff --git a/src/virtual-keyboard.h b/src/virtual-keyboard.h index c3e8b12..a6c69c5 100644 --- a/src/virtual-keyboard.h +++ b/src/virtual-keyboard.h @@ -3,6 +3,9 @@ #include "shell.h" +#define DIYA_SIGNAL_VKB_MODIFIER_CHANGED "modifier-changed" +#define DIYA_SIGNAL_VKB_KEY_PRESSED "pressed" +#define DIYA_SIGNAL_VKB_KEY_RELEASED "released" typedef enum { VKB_KEY_STATE_RELEASED = 0 /*WL_KEYBOARD_KEY_STATE_RELEASED*/, diff --git a/src/widgets/dashboard-widget.c b/src/widgets/dashboard-widget.c index 7b9c427..a461157 100644 --- a/src/widgets/dashboard-widget.c +++ b/src/widgets/dashboard-widget.c @@ -60,6 +60,12 @@ static void diya_dashboard_widget_init(DiyaDashboardWidget * self) // gtk_widget_set_can_focus(GTK_WIDGET(self), true); //gtk_widget_set_name(GTK_WIDGET(dashboard),NAMESPACE); //gtk_window_set_default_size(GTK_WINDOW(dashboard), 48, 48); + + // event controller + //GtkEventController *event_controller = gtk_event_controller_key_new(); + //g_signal_connect(event_controller, "key-pressed", G_CALLBACK(on_diya_dashboard_key_press), self); + // gtk_widget_add_controller(GTK_WIDGET(self), event_controller); + } static void diya_dashboard_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) diff --git a/src/widgets/virtual-keyboard-widgets.c b/src/widgets/virtual-keyboard-widgets.c index 8068372..fd47afe 100644 --- a/src/widgets/virtual-keyboard-widgets.c +++ b/src/widgets/virtual-keyboard-widgets.c @@ -81,8 +81,8 @@ static void diya_vkb_button_init(DiyaVkbButton *self) } // event handle GtkGesture *controller = gtk_gesture_click_new(); - g_signal_connect(controller, "pressed", G_CALLBACK(diya_vkb_button_event), "pressed"); - g_signal_connect(controller, "released", G_CALLBACK(diya_vkb_button_event), "released"); + g_signal_connect(controller, "pressed", G_CALLBACK(diya_vkb_button_event), DIYA_SIGNAL_VKB_KEY_PRESSED); + g_signal_connect(controller, "released", G_CALLBACK(diya_vkb_button_event), DIYA_SIGNAL_VKB_KEY_RELEASED); gtk_widget_add_controller(GTK_WIDGET(self), GTK_EVENT_CONTROLLER(controller)); } @@ -203,7 +203,7 @@ static void diya_virtual_keyboard_widget_class_init(DiyaVirtualKeyboardWidgetCla gobject_class->dispose = diya_virtual_keyboard_widget_dispose; gtk_widget_class_set_css_name(GTK_WIDGET_CLASS(class), "diya-vkb"); gtk_widget_class_set_layout_manager_type(GTK_WIDGET_CLASS(class), GTK_TYPE_GRID_LAYOUT); - g_signal_new("pressed", + g_signal_new(DIYA_SIGNAL_VKB_KEY_PRESSED, DIYA_TYPE_VKB_BUTTON, G_SIGNAL_DETAILED | G_SIGNAL_ACTION | @@ -215,7 +215,7 @@ static void diya_virtual_keyboard_widget_class_init(DiyaVirtualKeyboardWidgetCla G_TYPE_NONE, 0, NULL); - g_signal_new("released", + g_signal_new(DIYA_SIGNAL_VKB_KEY_RELEASED, DIYA_TYPE_VKB_BUTTON, G_SIGNAL_DETAILED | G_SIGNAL_ACTION | @@ -276,7 +276,7 @@ void diya_virtual_keyboard_widget_set_keyboard(DiyaVirtualKeyboardWidget* self, g_debug("set button key: %s", diya_object_to_string(key)); if(diya_vkb_key_is_modifier(key)) { - button->mod_sig_id = g_signal_connect(self->vkb, "modifier-changed", G_CALLBACK(on_kb_modifier_changed), button); + button->mod_sig_id = g_signal_connect(self->vkb, DIYA_SIGNAL_VKB_MODIFIER_CHANGED, G_CALLBACK(on_kb_modifier_changed), button); } } diya_vkb_button_set_key(button, key);