From bf1cb39b4b85911e83e961f27367f3e91428ce73 Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Sat, 25 Aug 2018 14:48:14 +0300 Subject: [PATCH] Support startup-notification in i3-nagbar & i3-config-wizard The default i3 config uses the `exec` command without `--no-startup-id` to launch: 1. i3-nagbar https://github.com/i3/i3/blob/4cba9fcbdab1487459014dbf8882f5f34e61435e/etc/config#L150 2. i3-config-wizard https://github.com/i3/i3/blob/4cba9fcbdab1487459014dbf8882f5f34e61435e/etc/config#L194 A user that opens i3 for the first time will be greeted with a "loading" cursor because of i3-config-wizard. --- Makefile.am | 4 ++++ i3-config-wizard/main.c | 13 +++++++++++++ i3-nagbar/main.c | 13 +++++++++++++ 3 files changed, 30 insertions(+) diff --git a/Makefile.am b/Makefile.am index f8ae7a1b..09bbb6d5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -357,10 +357,12 @@ i3_msg_i3_msg_SOURCES = \ i3_nagbar_i3_nagbar_CFLAGS = \ $(AM_CFLAGS) \ + $(LIBSN_CFLAGS) \ $(libi3_CFLAGS) i3_nagbar_i3_nagbar_LDADD = \ $(libi3_LIBS) \ + $(LIBSN_LIBS) \ $(XCB_UTIL_CURSOR_LIBS) i3_nagbar_i3_nagbar_SOURCES = \ @@ -414,10 +416,12 @@ i3bar_i3bar_SOURCES = \ i3_config_wizard_i3_config_wizard_CFLAGS = \ $(AM_CFLAGS) \ $(libi3_CFLAGS) \ + $(LIBSN_CFLAGS) \ $(XKBCOMMON_CFLAGS) i3_config_wizard_i3_config_wizard_LDADD = \ $(libi3_LIBS) \ + $(LIBSN_LIBS) \ $(XCB_UTIL_KEYSYMS_LIBS) \ $(XKBCOMMON_LIBS) diff --git a/i3-config-wizard/main.c b/i3-config-wizard/main.c index 0e0a3e65..013d1053 100644 --- a/i3-config-wizard/main.c +++ b/i3-config-wizard/main.c @@ -48,6 +48,9 @@ #include #include +#define SN_API_NOT_YET_FROZEN 1 +#include + #include #include #include @@ -847,6 +850,10 @@ int main(int argc, char *argv[]) { #include "atoms.xmacro" #undef xmacro + /* Init startup notification. */ + SnDisplay *sndisplay = sn_xcb_display_new(conn, NULL, NULL); + SnLauncheeContext *sncontext = sn_launchee_context_new_from_environment(sndisplay, screen); + root_screen = xcb_aux_get_screen(conn, screen); root = root_screen->root; @@ -879,6 +886,7 @@ int main(int argc, char *argv[]) { 0, /* back pixel: black */ XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_BUTTON_PRESS}); + sn_launchee_context_setup_window(sncontext, win); /* Map the window (make it visible) */ xcb_map_window(conn, win); @@ -940,6 +948,11 @@ int main(int argc, char *argv[]) { exit(-1); } + /* Startup complete. */ + sn_launchee_context_complete(sncontext); + sn_launchee_context_unref(sncontext); + sn_display_unref(sndisplay); + xcb_flush(conn); xcb_generic_event_t *event; diff --git a/i3-nagbar/main.c b/i3-nagbar/main.c index 3e5f43e3..1d1fcc51 100644 --- a/i3-nagbar/main.c +++ b/i3-nagbar/main.c @@ -32,6 +32,9 @@ #include #include +#define SN_API_NOT_YET_FROZEN 1 +#include + #include "i3-nagbar.h" /** This is the equivalent of XC_left_ptr. I’m not sure why xcb doesn’t have a @@ -415,6 +418,10 @@ int main(int argc, char *argv[]) { #include "atoms.xmacro" #undef xmacro + /* Init startup notification. */ + SnDisplay *sndisplay = sn_xcb_display_new(conn, NULL, NULL); + SnLauncheeContext *sncontext = sn_launchee_context_new_from_environment(sndisplay, screens); + root_screen = xcb_aux_get_screen(conn, screens); root = root_screen->root; @@ -484,6 +491,7 @@ int main(int argc, char *argv[]) { XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE, cursor}); + sn_launchee_context_setup_window(sncontext, win); /* Map the window (make it visible) */ xcb_map_window(conn, win); @@ -544,6 +552,11 @@ int main(int argc, char *argv[]) { /* Initialize the drawable bar */ draw_util_surface_init(conn, &bar, win, get_visualtype(root_screen), win_pos.width, win_pos.height); + /* Startup complete. */ + sn_launchee_context_complete(sncontext); + sn_launchee_context_unref(sncontext); + sn_display_unref(sndisplay); + /* Grab the keyboard to get all input */ xcb_flush(conn); -- 2.39.2