diff --git a/etc/config b/etc/config deleted file mode 100644 index 67bcb147..00000000 --- a/etc/config +++ /dev/null @@ -1,206 +0,0 @@ -# i3 config file (v4) -# -# Please see https://i3wm.org/docs/userguide.html for a complete reference! -# -# This config file uses keycodes (bindsym) and was written for the QWERTY -# layout. -# -# To get a config file with the same key positions, but for your current -# layout, use the i3-config-wizard -# - -# Font for window titles. Will also be used by the bar unless a different font -# is used in the bar {} block below. -font pango:monospace 8 - -# This font is widely installed, provides lots of unicode glyphs, right-to-left -# text rendering and scalability on retina/hidpi displays (thanks to pango). -#font pango:DejaVu Sans Mono 8 - -# The combination of xss-lock, nm-applet and pactl is a popular choice, so -# they are included here as an example. Modify as you see fit. - -# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the -# screen before suspend. Use loginctl lock-session to lock your screen. -exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork - -# NetworkManager is the most popular way to manage wireless networks on Linux, -# and nm-applet is a desktop environment-independent system tray GUI for it. -exec --no-startup-id nm-applet - -# Use pactl to adjust volume in PulseAudio. -set $refresh_i3status killall -SIGUSR1 i3status -bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status -bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status -bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status -bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status - -# use these keys for focus, movement, and resize directions when reaching for -# the arrows is not convenient -set $up l -set $down k -set $left j -set $right semicolon - -# use Mouse+Mod1 to drag floating windows to their wanted position -floating_modifier Mod1 - -# start a terminal -bindsym Mod1+Return exec i3-sensible-terminal - -# kill focused window -bindsym Mod1+Shift+q kill - -# start dmenu (a program launcher) -bindsym Mod1+d exec dmenu_run -# A more modern dmenu replacement is rofi: -# bindsym Mod1+d exec rofi -modi drun,run -show drun -# There also is i3-dmenu-desktop which only displays applications shipping a -# .desktop file. It is a wrapper around dmenu, so you need that installed. -# bindsym Mod1+d exec --no-startup-id i3-dmenu-desktop - -# change focus -bindsym Mod1+$left focus left -bindsym Mod1+$down focus down -bindsym Mod1+$up focus up -bindsym Mod1+$right focus right - -# alternatively, you can use the cursor keys: -bindsym Mod1+Left focus left -bindsym Mod1+Down focus down -bindsym Mod1+Up focus up -bindsym Mod1+Right focus right - -# move focused window -bindsym Mod1+Shift+$left move left -bindsym Mod1+Shift+$down move down -bindsym Mod1+Shift+$up move up -bindsym Mod1+Shift+$right move right - -# alternatively, you can use the cursor keys: -bindsym Mod1+Shift+Left move left -bindsym Mod1+Shift+Down move down -bindsym Mod1+Shift+Up move up -bindsym Mod1+Shift+Right move right - -# split in horizontal orientation -bindsym Mod1+h split h - -# split in vertical orientation -bindsym Mod1+v split v - -# enter fullscreen mode for the focused container -bindsym Mod1+f fullscreen toggle - -# change container layout (stacked, tabbed, toggle split) -bindsym Mod1+s layout stacking -bindsym Mod1+w layout tabbed -bindsym Mod1+e layout toggle split - -# toggle tiling / floating -bindsym Mod1+Shift+space floating toggle - -# change focus between tiling / floating windows -bindsym Mod1+space focus mode_toggle - -# focus the parent container -bindsym Mod1+a focus parent - -# focus the child container -#bindsym Mod1+d focus child - -# move the currently focused window to the scratchpad -bindsym Mod1+Shift+minus move scratchpad - -# Show the next scratchpad window or hide the focused scratchpad window. -# If there are multiple scratchpad windows, this command cycles through them. -bindsym Mod1+minus scratchpad show - -# Define names for default workspaces for which we configure key bindings later on. -# We use variables to avoid repeating the names in multiple places. -set $ws1 "1" -set $ws2 "2" -set $ws3 "3" -set $ws4 "4" -set $ws5 "5" -set $ws6 "6" -set $ws7 "7" -set $ws8 "8" -set $ws9 "9" -set $ws10 "10" - -# switch to workspace -bindsym Mod1+1 workspace number $ws1 -bindsym Mod1+2 workspace number $ws2 -bindsym Mod1+3 workspace number $ws3 -bindsym Mod1+4 workspace number $ws4 -bindsym Mod1+5 workspace number $ws5 -bindsym Mod1+6 workspace number $ws6 -bindsym Mod1+7 workspace number $ws7 -bindsym Mod1+8 workspace number $ws8 -bindsym Mod1+9 workspace number $ws9 -bindsym Mod1+0 workspace number $ws10 - -# move focused container to workspace -bindsym Mod1+Shift+1 move container to workspace number $ws1 -bindsym Mod1+Shift+2 move container to workspace number $ws2 -bindsym Mod1+Shift+3 move container to workspace number $ws3 -bindsym Mod1+Shift+4 move container to workspace number $ws4 -bindsym Mod1+Shift+5 move container to workspace number $ws5 -bindsym Mod1+Shift+6 move container to workspace number $ws6 -bindsym Mod1+Shift+7 move container to workspace number $ws7 -bindsym Mod1+Shift+8 move container to workspace number $ws8 -bindsym Mod1+Shift+9 move container to workspace number $ws9 -bindsym Mod1+Shift+0 move container to workspace number $ws10 - -# reload the configuration file -bindsym Mod1+Shift+c reload -# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) -bindsym Mod1+Shift+r restart -# exit i3 (logs you out of your X session) -bindsym Mod1+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" - -# resize window (you can also use the mouse for that) -mode "resize" { - # These bindings trigger as soon as you enter the resize mode - - # Pressing left will shrink the window’s width. - # Pressing right will grow the window’s width. - # Pressing up will shrink the window’s height. - # Pressing down will grow the window’s height. - bindsym $left resize shrink width 10 px or 10 ppt - bindsym $down resize grow height 10 px or 10 ppt - bindsym $up resize shrink height 10 px or 10 ppt - bindsym $right resize grow width 10 px or 10 ppt - - # same bindings, but for the arrow keys - bindsym Left resize shrink width 10 px or 10 ppt - bindsym Down resize grow height 10 px or 10 ppt - bindsym Up resize shrink height 10 px or 10 ppt - bindsym Right resize grow width 10 px or 10 ppt - - # back to normal: Enter or Escape or Mod1+r - bindsym Return mode "default" - bindsym Escape mode "default" - bindsym Mod1+r mode "default" -} - -bindsym Mod1+r mode "resize" - -# Start i3bar to display a workspace bar (plus the system information i3status -# finds out, if available) -bar { - status_command i3status -} - -####################################################################### -# automatically start i3-config-wizard to offer the user to create a -# keysym-based config which used their favorite modifier (alt or windows) -# -# i3-config-wizard will not launch if there already is a config file -# in ~/.config/i3/config (or $XDG_CONFIG_HOME/i3/config if set) or -# ~/.i3/config. -# -# Please remove the following exec line: -####################################################################### -exec i3-config-wizard diff --git a/etc/config.keycodes b/etc/config.keycodes deleted file mode 100644 index 35468bf0..00000000 --- a/etc/config.keycodes +++ /dev/null @@ -1,181 +0,0 @@ -# WARNING -# WARNING: This configuration file is a template for the i3-config-wizard to -# WARNING: generate a config which uses keysyms in your current layout. It does -# WARNING: not get loaded by i3. Please do not change it. -# WARNING - -# i3 config file (v4) -# -# Please see https://i3wm.org/docs/userguide.html for a complete reference! - -set $mod Mod1 - -# Font for window titles. Will also be used by the bar unless a different font -# is used in the bar {} block below. -font pango:monospace 8 - -# This font is widely installed, provides lots of unicode glyphs, right-to-left -# text rendering and scalability on retina/hidpi displays (thanks to pango). -#font pango:DejaVu Sans Mono 8 - -# The combination of xss-lock, nm-applet and pactl is a popular choice, so -# they are included here as an example. Modify as you see fit. - -# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the -# screen before suspend. Use loginctl lock-session to lock your screen. -exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork - -# NetworkManager is the most popular way to manage wireless networks on Linux, -# and nm-applet is a desktop environment-independent system tray GUI for it. -exec --no-startup-id nm-applet - -# Use pactl to adjust volume in PulseAudio. -set $refresh_i3status killall -SIGUSR1 i3status -bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status -bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status -bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status -bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status - -# Use Mouse+$mod to drag floating windows to their wanted position -floating_modifier $mod - -# start a terminal -bindcode $mod+36 exec i3-sensible-terminal - -# kill focused window -bindcode $mod+Shift+24 kill - -# start dmenu (a program launcher) -bindcode $mod+40 exec dmenu_run -# A more modern dmenu replacement is rofi: -# bindcode $mod+40 exec rofi -modi drun,run -show drun -# There also is i3-dmenu-desktop which only displays applications shipping a -# .desktop file. It is a wrapper around dmenu, so you need that installed. -bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop - -# change focus -bindcode $mod+44 focus left -bindcode $mod+45 focus down -bindcode $mod+46 focus up -bindcode $mod+47 focus right - -# alternatively, you can use the cursor keys: -bindcode $mod+113 focus left -bindcode $mod+116 focus down -bindcode $mod+111 focus up -bindcode $mod+114 focus right - -# move focused window -bindcode $mod+Shift+44 move left -bindcode $mod+Shift+45 move down -bindcode $mod+Shift+46 move up -bindcode $mod+Shift+47 move right - -# alternatively, you can use the cursor keys: -bindcode $mod+Shift+113 move left -bindcode $mod+Shift+116 move down -bindcode $mod+Shift+111 move up -bindcode $mod+Shift+114 move right - -# split in horizontal orientation -bindcode $mod+43 split h - -# split in vertical orientation -bindcode $mod+55 split v - -# enter fullscreen mode for the focused container -bindcode $mod+41 fullscreen toggle - -# change container layout (stacked, tabbed, toggle split) -bindcode $mod+39 layout stacking -bindcode $mod+25 layout tabbed -bindcode $mod+26 layout toggle split - -# toggle tiling / floating -bindcode $mod+Shift+65 floating toggle - -# change focus between tiling / floating windows -bindcode $mod+65 focus mode_toggle - -# focus the parent container -bindcode $mod+38 focus parent - -# focus the child container -#bindsym $mod+d focus child - -# Define names for default workspaces for which we configure key bindings later on. -# We use variables to avoid repeating the names in multiple places. -set $ws1 "1" -set $ws2 "2" -set $ws3 "3" -set $ws4 "4" -set $ws5 "5" -set $ws6 "6" -set $ws7 "7" -set $ws8 "8" -set $ws9 "9" -set $ws10 "10" - -# switch to workspace -bindcode $mod+10 workspace number $ws1 -bindcode $mod+11 workspace number $ws2 -bindcode $mod+12 workspace number $ws3 -bindcode $mod+13 workspace number $ws4 -bindcode $mod+14 workspace number $ws5 -bindcode $mod+15 workspace number $ws6 -bindcode $mod+16 workspace number $ws7 -bindcode $mod+17 workspace number $ws8 -bindcode $mod+18 workspace number $ws9 -bindcode $mod+19 workspace number $ws10 - -# move focused container to workspace -bindcode $mod+Shift+10 move container to workspace number $ws1 -bindcode $mod+Shift+11 move container to workspace number $ws2 -bindcode $mod+Shift+12 move container to workspace number $ws3 -bindcode $mod+Shift+13 move container to workspace number $ws4 -bindcode $mod+Shift+14 move container to workspace number $ws5 -bindcode $mod+Shift+15 move container to workspace number $ws6 -bindcode $mod+Shift+16 move container to workspace number $ws7 -bindcode $mod+Shift+17 move container to workspace number $ws8 -bindcode $mod+Shift+18 move container to workspace number $ws9 -bindcode $mod+Shift+19 move container to workspace number $ws10 - -# reload the configuration file -bindcode $mod+Shift+54 reload -# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) -bindcode $mod+Shift+27 restart -# exit i3 (logs you out of your X session) -bindcode $mod+Shift+26 exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" - -# resize window (you can also use the mouse for that) -mode "resize" { - # These bindings trigger as soon as you enter the resize mode - - # Pressing left will shrink the window’s width. - # Pressing right will grow the window’s width. - # Pressing up will shrink the window’s height. - # Pressing down will grow the window’s height. - bindcode 44 resize shrink width 10 px or 10 ppt - bindcode 45 resize grow height 10 px or 10 ppt - bindcode 46 resize shrink height 10 px or 10 ppt - bindcode 47 resize grow width 10 px or 10 ppt - - # same bindings, but for the arrow keys - bindcode 113 resize shrink width 10 px or 10 ppt - bindcode 116 resize grow height 10 px or 10 ppt - bindcode 111 resize shrink height 10 px or 10 ppt - bindcode 114 resize grow width 10 px or 10 ppt - - # back to normal: Enter or Escape or $mod+r - bindcode 36 mode "default" - bindcode 9 mode "default" - bindcode $mod+27 mode "default" -} - -bindcode $mod+27 mode "resize" - -# Start i3bar to display a workspace bar (plus the system information i3status -# finds out, if available) -bar { - status_command i3status -} diff --git a/etc/config.scm b/etc/config.scm new file mode 100644 index 00000000..6bf98479 --- /dev/null +++ b/etc/config.scm @@ -0,0 +1,152 @@ +(include "hooks.scm") + +(display "-- GUILE CONFIGURATION START LOADING --\n") + +(define (run-shell-command c) + (system (string-concatenate + (list c " &")))) + +;; (include "i3.scm") +(define font "pango:Fira Mono 12") +;; (run-shell-command "./i3bar -b 0") + +;; (set-font ) + +(define (reload) + (display "Reloading (with refresh)!\n") + (load "config.scm") + (refresh)) + +(define (urxvt) + (display "Starting urxvt\n") + (run-shell-command "urxvt")) + +;; (define (config-bars) +;; (bar-start) +;; (set-bar-position "top") +;; (bar-finish) +;; ;; 2 bars +;; (bar-start) +;; (set-bar-position "bottom") +;; (bar-finish) +;; (i3bar)) + +;; ;; (i3bar) +;; ;; (i3-exec "" "" urxvt) + +;; (define (cw) +;; (change-workspace "3")) + +(define (cw1) + (change-workspace "1")) + +(define (cw2) + (let ((resp (change-workspace "2"))) + (if (not (boolean? resp)) + (format #f "~A ~A" (car resp) (cadr resp))))) + +(define (cwz) + (let ((resp (change-workspace "z"))) + (if (not (boolean? resp)) + (format #f "~A ~A" (car resp) (cadr resp))))) + +;; (define (default) +;; (change-workspace "default")) + +(use-modules (ice-9 popen)) +(use-modules (ice-9 rdelim)) + +(define (run-and-read command) + (let* ((port (open-input-pipe command)) + (str (read-line port))) ; from (ice-9 rdelim) + (close-pipe port) + str)) + +(define (eval-expr) + (run-shell-command (format #f "./i3-msg ~S" (run-and-read "echo '' | dmenu")))) + +(set-binding "bindsym" "Mod1" "Return" "" "" "" "" + (lambda () (urxvt))) + +(set-binding "bindsym" "Mod1" "space" "" "" "" "" + (lambda () (eval-expr))) + +(set-binding "bindsym" "Mod1" "r" "" "" "" "" + (lambda () (reload))) + +(set-binding "bindsym" "Mod1" "1" "" "" "" "" + (lambda () (cw1))) +(set-binding "bindsym" "Mod1" "2" "" "" "" "" + (lambda () (cw2))) +(set-binding "bindsym" "Mod1" "z" "" "" "" "" + (lambda () (cwz))) + +(set-binding "bindsym" "Mod1" "v" "" "" "" "" + (lambda () (split "vertical"))) +(set-binding "bindsym" "Mod1" "h" "" "" "" "" + (lambda () (split "horizontal"))) + +(set-binding "bindsym" "Mod1" "q" "" "" "" "" + (lambda () (kill))) + +(set-binding "bindsym" "Mod1" "Right" "" "" "" "" + (lambda () (focus-direction "right"))) + +(set-binding "bindsym" "Mod1" "Left" "" "" "" "" + (lambda () (focus-direction "left"))) + +(set-binding "bindsym" "Mod1" "Up" "" "" "" "" + (lambda () (focus-direction "up"))) + +(set-binding "bindsym" "Mod1" "Down" "" "" "" "" + (lambda () (focus-direction "down"))) + +(set-binding "bindsym" "Mod1" "w" "" "" "" "" + (lambda () (layout "tabbed"))) +(set-binding "bindsym" "Mod1" "s" "" "" "" "" + (lambda () (layout "stacked"))) +(set-binding "bindsym" "Mod1" "e" "" "" "" "" + (lambda () (toggle-layout "split"))) + +;; (set-binding "bindsym" "Mod1" "o" "" "" "" "" +;; (lambda () (move-to-workspace "2"))) + +(display "Loaded\n") +;; (set-binding "bindsym" "Mod2" "Return" "" "" "" "" urxvt) + +;; (set-binding "bindsym" "Mod1" "q" "" "" "" "" kill-window) +;; (set-binding "bindsym" "Mod1" "w" "" "" "" "" kill-client) +;; (set-binding "bindsym" "Mod1" "1" "" "" "" "" default) +;; (set-binding "bindsym" "Mod1" "2" "" "" "" "" cw2) +;; (set-binding "bindsym" "Mod1" "3" "" "" "" "" cw) + +;; ;; Con *ws = con_get_workspace(nc) +;; ;; Con *fs = con_get_fullscreen_covering_ws(ws) +;; ;; con_move_to_output(nc, output, false); +;; ;; con_toggle_fullscreen(nc, CF_OUTPUT); +;; ;; con_move_to_output_name(nc, assignment->dest.output, true); + +;; (define (move-to-workspace window workspace) +;; (display "Moving window ") +;; (display (window-name window)) +;; (display " to workspace ") +;; (display workspace)) + +;; (define assignments +;; ;; #((matcher) assign-function) +;; `(("urxvt" ,(lambda () (move-to-workspace "O" "3"))))) + +;; ;; ((lambda () (+ 2 1))) + +;; ;; (define (t i) (display ("ICAO"))) + +;; ;; ((eval '+) 1 2) + +;; ;; (call-with-values (cdr `("urxvt" ,t)) 0) + +;; (display "-- GUILE CONFIGURATION LOADED --\n") +(define loaded #t) + +(run-shell-command "feh --bg-fill ~/freeze/bluescreen_0.png") + +;; (split "vertical") diff --git a/etc/hooks.scm b/etc/hooks.scm new file mode 100644 index 00000000..bab9c9c3 --- /dev/null +++ b/etc/hooks.scm @@ -0,0 +1,11 @@ +(define (enter-notify-hook params) + "Function called each time the mouse focus changes window. +Param is a list with: the name of the window. +Return #f to prevent changing focus." + (not (string=? (car params) "no-focus"))) + +(define (click-hook params) + ;; (format #t "Clicked ~A" (car params)) + ;; (let ((root-x root-y event-x event-y state same-screen))) + + (not (string=? (car params) "no-focus"))) diff --git a/include/guile.h b/include/guile.h new file mode 100644 index 00000000..0ae5ac3c --- /dev/null +++ b/include/guile.h @@ -0,0 +1,2 @@ +SCM guile_split(SCM direction); +bool guile_hook(char * name, SCM params); diff --git a/meson.build b/meson.build index 6f26e147..b79e66e1 100644 --- a/meson.build +++ b/meson.build @@ -18,6 +18,7 @@ sources = [ 'src/fake_outputs.c', 'src/floating.c', 'src/handlers.c', + 'src/guile.c', 'src/ipc.c', 'src/key_press.c', 'src/load_layout.c', diff --git a/src/click.c b/src/click.c index 726c6296..ba896f89 100644 --- a/src/click.c +++ b/src/click.c @@ -11,7 +11,8 @@ #include -#include "guile-objects.h" +#include "guile.h" +#include typedef enum { CLICK_BORDER = 0, CLICK_DECORATION = 1, @@ -309,19 +310,25 @@ void handle_button_press(xcb_button_press_event_t *event) { last_timestamp = event->time; - // Click hook - SCM hook = scm_variable_ref(scm_c_lookup("button-press-hook")); - if (scm_is_true(hook)) { - scm_call_6(hook, - scm_from_int(event->root_x), scm_from_int(event->root_y), - scm_from_int(event->event_x), scm_from_int(event->event_y), - scm_from_int(event->state), scm_from_int(event->same_screen)); - } - const uint32_t mod = (config.floating_modifier & 0xFFFF); const bool mod_pressed = (mod != 0 && (event->state & mod) == mod); DLOG("floating_mod = %d, detail = %d\n", mod_pressed, event->detail); - if ((con = con_by_window_id(event->event))) { + + con = con_by_window_id(event->event); + + // Click hook + if (!guile_hook + ("click-hook", scm_list_3 + (scm_from_utf8_string(i3string_as_utf8(con->window->name)), + scm_from_int(event->root_x), scm_from_int(event->root_y)))) { + // Ignore the click + xcb_allow_events(conn, XCB_ALLOW_REPLAY_POINTER, event->time); + xcb_flush(conn); + tree_render(); + return; + } + + if (con) { route_click(con, event, mod_pressed, CLICK_INSIDE); return; } diff --git a/src/guile-objects.h b/src/guile-objects.h deleted file mode 100644 index ab5323ed..00000000 --- a/src/guile-objects.h +++ /dev/null @@ -1,2 +0,0 @@ - -SCM guile_split(SCM direction); diff --git a/src/guile.c b/src/guile.c new file mode 100644 index 00000000..1576bfe6 --- /dev/null +++ b/src/guile.c @@ -0,0 +1,12 @@ +#include "all.h" + +#include +#include "guile.h" + +bool guile_hook(char * name, SCM params) { + SCM hook = scm_variable_ref(scm_c_lookup(name)); + if (scm_is_true(hook)) { + return scm_to_bool(scm_call_1(hook, params)); + } + return true; +} diff --git a/src/handlers.c b/src/handlers.c index b74e589d..d2ed22b0 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -17,6 +17,8 @@ #define SN_API_NOT_YET_FROZEN 1 #include +#include "guile.h" + int randr_base = -1; int xkb_base = -1; int xkb_current_group; @@ -121,7 +123,7 @@ static void check_crossing_screen_boundary(uint32_t x, uint32_t y) { * When the user moves the mouse pointer onto a window, this callback gets called. * */ -static void handle_enter_notify(xcb_enter_notify_event_t *event) { +static void handle_enter_notify(xcb_enter_notify_event_t *event) { Con *con; last_timestamp = event->time; @@ -162,13 +164,20 @@ static void handle_enter_notify(xcb_enter_notify_event_t *event) { Con *child; TAILQ_FOREACH_REVERSE (child, &(con->nodes_head), nodes_head, nodes) { if (rect_contains(child->deco_rect, event->event_x, event->event_y)) { - LOG("using child %p / %s instead!\n", child, child->name); + printf("using child %p / %s instead!\n", child, child->name); con = child; break; } } } + // Run external guile hook, and stop handling the event if necessary + if(con->window != NULL && + !guile_hook("enter-notify-hook", + scm_list_1(scm_from_utf8_string(i3string_as_utf8(con->window->name))))) { + return; + } + if (config.disable_focus_follows_mouse) return; diff --git a/src/main.c b/src/main.c index 2fe5eb0d..2713135e 100644 --- a/src/main.c +++ b/src/main.c @@ -26,7 +26,7 @@ #include #include -#include "guile-objects.h" +#include "guile.h" #ifdef I3_ASAN_ENABLED #include