]> git.sur5r.net Git - i3/i3/commitdiff
Support startup-notification in i3-nagbar & i3-config-wizard 3374/head
authorOrestis Floros <orestisf1993@gmail.com>
Sat, 25 Aug 2018 11:48:14 +0000 (14:48 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Sat, 25 Aug 2018 11:54:16 +0000 (14:54 +0300)
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
i3-config-wizard/main.c
i3-nagbar/main.c

index f8ae7a1b2b22416b41714c0a6844b4d96a507052..09bbb6d507348e6a040ef1167502dac27cbb9f44 100644 (file)
@@ -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)
 
index 0e0a3e65435646e5329131c3ff6de23b9e80ad3a..013d1053a80051cf40cf76f0537c1075c13e183d 100644 (file)
@@ -48,6 +48,9 @@
 #include <xkbcommon/xkbcommon.h>
 #include <xkbcommon/xkbcommon-x11.h>
 
+#define SN_API_NOT_YET_FROZEN 1
+#include <libsn/sn-launchee.h>
+
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
 #include <X11/XKBlib.h>
@@ -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;
index 3e5f43e367ef6018b460daa337ef220c7b965ee8..1d1fcc517358e88305cf25f69ec97e582abadefe 100644 (file)
@@ -32,6 +32,9 @@
 #include <xcb/randr.h>
 #include <xcb/xcb_cursor.h>
 
+#define SN_API_NOT_YET_FROZEN 1
+#include <libsn/sn-launchee.h>
+
 #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);