Add functions to check fullscreen windows
This commit is contained in:
parent
28db0416b4
commit
9e824a79ee
@ -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.
|
||||||
|
@ -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: */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user