Add functions to check fullscreen windows

This commit is contained in:
Benedikt Heine 2017-08-04 11:05:38 +02:00
parent 28db0416b4
commit 9e824a79ee
2 changed files with 75 additions and 0 deletions

View File

@ -186,6 +186,61 @@ void screen_update_fallback(void)
screens[0].dim.h = DisplayHeight(xctx.dpy, screen); screens[0].dim.h = DisplayHeight(xctx.dpy, screen);
} }
/* see screen.h */
bool have_fullscreen_window(void)
{
return window_is_fullscreen(get_focused_window());
}
/* see screen.h */
bool window_is_fullscreen(Window window)
{
bool fs = false;
Atom has_wm_state = XInternAtom(xctx.dpy, "_NET_WM_STATE", True);
if (has_wm_state == None){
return false;
}
Atom actual_type_return;
int actual_format_return;
unsigned long bytes_after_return;
unsigned char *prop_to_return;
unsigned long n_items;
int result = XGetWindowProperty(
xctx.dpy,
window,
has_wm_state,
0, /* long_offset */
sizeof(window), /* long_length */
false, /* delete */
AnyPropertyType, /* req_type */
&actual_type_return,
&actual_format_return,
&n_items,
&bytes_after_return,
&prop_to_return);
if (result == Success) {
for(int i = 0; i < n_items; i++) {
char *atom = XGetAtomName(xctx.dpy, ((Atom*)prop_to_return)[i]);
if (atom) {
if(0 == strcmp("_NET_WM_STATE_FULLSCREEN", atom))
fs = true;
XFree(atom);
if(fs)
break;
}
}
}
if (prop_to_return)
XFree(prop_to_return);
return fs;
}
/* /*
* Select the screen on which the Window * Select the screen on which the Window
* should be displayed. * should be displayed.

View File

@ -3,6 +3,7 @@
#define DUNST_SCREEN_H #define DUNST_SCREEN_H
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <stdbool.h>
#define INRECT(x,y,rx,ry,rw,rh) ((x) >= (rx) && (x) < (rx)+(rw) && (y) >= (ry) && (y) < (ry)+(rh)) #define INRECT(x,y,rx,ry,rw,rh) ((x) >= (rx) && (x) < (rx)+(rw) && (y) >= (ry) && (y) < (ry)+(rh))
@ -27,5 +28,24 @@ void screen_check_event(XEvent event);
screen_info *get_active_screen(void); screen_info *get_active_screen(void);
double get_dpi_for_screen(screen_info *scr); double get_dpi_for_screen(screen_info *scr);
/**
* Find the currently focused window and check if it's in
* fullscreen mode
*
* @see window_is_fullscreen()
* @see get_focused_window()
*
* @return `true` if the focused window is in fullscreen mode
*/
bool have_fullscreen_window(void);
/**
* Check if window is in fullscreen mode
*
* @param window the x11 window object
* @return `true` if `window` is in fullscreen mode
*/
bool window_is_fullscreen(Window window);
#endif #endif
/* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */ /* vim: set tabstop=8 shiftwidth=8 expandtab textwidth=0: */