summaryrefslogtreecommitdiff
path: root/manager.c
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-04-15 18:35:41 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-04-15 18:35:41 +0200
commit6330c2827935a67ee03f18baf9cf4a7a77684760 (patch)
tree36f454ff7c8de804987b1b4af21272ca7363d005 /manager.c
parentf214499d3d5be0bc3582f8de5d2567b8767fef87 (diff)
downloadglitch-6330c2827935a67ee03f18baf9cf4a7a77684760.tar.gz
Merged rofi launcher alternative
Diffstat (limited to 'manager.c')
-rw-r--r--manager.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/manager.c b/manager.c
index dde091e..a38c1cb 100644
--- a/manager.c
+++ b/manager.c
@@ -317,6 +317,12 @@ void init_window_manager(void) {
wm.font = XftFontOpenName(wm.dpy, wm.screen, "fixed");
}
+ wm.launcher_font = XftFontOpenName(wm.dpy, wm.screen, launcher_font_name);
+ if (!wm.launcher_font) {
+ log_message(stdout, LOG_WARNING, "Failed to load launcher font %s, falling back to fixed", launcher_font_name);
+ wm.launcher_font = XftFontOpenName(wm.dpy, wm.screen, "fixed");
+ }
+
Visual *visual = DefaultVisual(wm.dpy, wm.screen);
// Create XftDraw for the root window.
@@ -386,6 +392,27 @@ void init_window_manager(void) {
XftColorAllocValue(wm.dpy, visual, wm.cmap, &render_color, &wm.xft_layout_float_fg);
}
+ if (!XftColorAllocName(wm.dpy, visual, wm.cmap, launcher_bg_color, &wm.xft_launcher_bg)) {
+ XRenderColor render_color = {0x0000, 0x0000, 0x0000, 0xFFFF};
+ XftColorAllocValue(wm.dpy, visual, wm.cmap, &render_color, &wm.xft_launcher_bg);
+ }
+ if (!XftColorAllocName(wm.dpy, visual, wm.cmap, launcher_border_color, &wm.xft_launcher_border)) {
+ XRenderColor render_color = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
+ XftColorAllocValue(wm.dpy, visual, wm.cmap, &render_color, &wm.xft_launcher_border);
+ }
+ if (!XftColorAllocName(wm.dpy, visual, wm.cmap, launcher_fg_color, &wm.xft_launcher_fg)) {
+ XRenderColor render_color = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
+ XftColorAllocValue(wm.dpy, visual, wm.cmap, &render_color, &wm.xft_launcher_fg);
+ }
+ if (!XftColorAllocName(wm.dpy, visual, wm.cmap, launcher_hl_bg_color, &wm.xft_launcher_hl_bg)) {
+ XRenderColor render_color = {0x8000, 0x8000, 0x0000, 0xFFFF};
+ XftColorAllocValue(wm.dpy, visual, wm.cmap, &render_color, &wm.xft_launcher_hl_bg);
+ }
+ if (!XftColorAllocName(wm.dpy, visual, wm.cmap, launcher_hl_fg_color, &wm.xft_launcher_hl_fg)) {
+ XRenderColor render_color = {0x0000, 0x0000, 0x0000, 0xFFFF};
+ XftColorAllocValue(wm.dpy, visual, wm.cmap, &render_color, &wm.xft_launcher_hl_fg);
+ }
+
wm.running = 1;
// Grab keys for keybinds.
@@ -488,9 +515,27 @@ void deinit_window_manager(void) {
XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_mic_muted_bg);
XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_mic_active_fg);
XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_mic_muted_fg);
+
+ XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_launcher_bg);
+ XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_launcher_border);
+ XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_launcher_fg);
+ XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_launcher_hl_bg);
+ XftColorFree(wm.dpy, DefaultVisual(wm.dpy, wm.screen), wm.cmap, &wm.xft_launcher_hl_fg);
+
XftDrawDestroy(wm.xft_draw);
+ if (wm.launcher_win) XDestroyWindow(wm.dpy, wm.launcher_win);
+ if (wm.launcher_items) {
+ for (int i = 0; i < wm.launcher_items_count; i++) {
+ free(wm.launcher_items[i].name);
+ free(wm.launcher_items[i].exec);
+ }
+ free(wm.launcher_items);
+ }
+ if (wm.launcher_filtered) free(wm.launcher_filtered);
+
XftFontClose(wm.dpy, wm.font);
+ XftFontClose(wm.dpy, wm.launcher_font);
XFreeCursor(wm.dpy, wm.cursor_default);
XFreeCursor(wm.dpy, wm.cursor_move);
XFreeCursor(wm.dpy, wm.cursor_resize);
@@ -1062,6 +1107,11 @@ void handle_button_release(void) {
// https://tronche.com/gui/x/xlib/events/keyboard-pointer/keyboard-pointer.html
void handle_key_press(void) {
+ if (wm.launcher_active) {
+ launcher_handle_key();
+ return;
+ }
+
log_message(stdout, LOG_DEBUG, ">> Key pressed > active window 0x%lx", wm.ev.xkey.subwindow);
if (wm.ev.type != KeyPress) return;