diff --git a/config.def.h b/config.def.h index 53204ee..bb4a406 100644 --- a/config.def.h +++ b/config.def.h @@ -20,6 +20,20 @@ enum alignment align = left; /* text alignment [left/center/right] */ int sticky_history = True; int verbosity = 0; + +/* monitor to display notifications on */ +int monitor = 0; + +/* follow focus to different monitor and display notifications there? + * possible values: + * FOLLOW_NONE + * FOLLOW_MOUSE + * FOLLOW_KEYBOARD + * + * everything else than FOLLOW_NONE overrides 'monitor' + */ +enum follow_mode f_mode = FOLLOW_NONE; + /* keyboard shortcuts */ keyboard_shortcut close_ks = {.str = "ctrl+space", .code = 0, .sym = NoSymbol,.is_valid = False}; /* ignore this */ diff --git a/dunst.c b/dunst.c index 668769b..bbb49fc 100644 --- a/dunst.c +++ b/dunst.c @@ -77,7 +77,6 @@ static dimension_t geometry; static XScreenSaverInfo *screensaver_info; static int font_h; -static enum follow_mode f_mode = FOLLOW_NONE; int next_notification_id = 1; @@ -958,7 +957,7 @@ Window get_focused_window(void) int select_screen(XineramaScreenInfo * info, int info_len) { if (f_mode == FOLLOW_NONE) { - return scr.scr; + return monitor; } else { int x, y; @@ -980,7 +979,7 @@ int select_screen(XineramaScreenInfo * info, int info_len) if (focused == 0) { /* something went wrong. Fallback to default */ - return scr.scr; + return monitor; } Window child_return; @@ -997,7 +996,7 @@ int select_screen(XineramaScreenInfo * info, int info_len) } /* something seems to be wrong. Fallback to default */ - return scr.scr; + return monitor; } } @@ -1005,15 +1004,15 @@ void update_screen_info() { #ifdef XINERAMA int n; - int screen = 0; + int screen = monitor; XineramaScreenInfo *info; #endif #ifdef XINERAMA if ((info = XineramaQueryScreens(dc->dpy, &n))) { screen = select_screen(info, n); if (screen >= n) { - fprintf(stderr, "Monitor %d not found\n", screen); - exit(EXIT_FAILURE); + /* invalid monitor, fallback to default */ + screen = 0; } scr.dim.x = info[screen].x_org; scr.dim.y = info[screen].y_org;