{"override-redirect", SYMBOL_INDEX (Qoverride_redirect)},
{"no-special-glyphs", SYMBOL_INDEX (Qno_special_glyphs)},
{"alpha-background", SYMBOL_INDEX (Qalpha_background)},
+#ifdef HAVE_X_WINDOWS
+ {"shaded", SYMBOL_INDEX (Qshaded)},
+#endif
#ifdef NS_IMPL_COCOA
{"ns-appearance", SYMBOL_INDEX (Qns_appearance)},
{"ns-transparent-titlebar", SYMBOL_INDEX (Qns_transparent_titlebar)},
DEFSYM (Qfullheight, "fullheight");
DEFSYM (Qfullboth, "fullboth");
DEFSYM (Qmaximized, "maximized");
+ DEFSYM (Qshaded, "shaded");
DEFSYM (Qx_resource_name, "x-resource-name");
DEFSYM (Qx_frame_parameter, "x-frame-parameter");
static void x_wm_set_icon_pixmap (struct frame *, ptrdiff_t);
static void x_initialize (void);
-static bool x_get_current_wm_state (struct frame *, Window, int *, bool *);
+static bool x_get_current_wm_state (struct frame *, Window, int *, bool *, bool *);
static void x_update_opaque_region (struct frame *, XEvent *);
/* Flush display of frame F. */
{
int value = FULLSCREEN_NONE;
Lisp_Object lval = Qnil;
- bool sticky = false;
+ bool sticky = false, shaded = false;
- x_get_current_wm_state (f, window, &value, &sticky);
+ x_get_current_wm_state (f, window, &value, &sticky, &shaded);
switch (value)
{
}
store_frame_param (f, Qfullscreen, lval);
-/** store_frame_param (f, Qsticky, sticky ? Qt : Qnil); **/
+ store_frame_param (f, Qsticky, sticky ? Qt : Qnil);
+ store_frame_param (f, Qshaded, shaded ? Qt : Qnil);
}
/* Flip back buffers on any frames with undrawn content. */
{
bool iconified = FRAME_ICONIFIED_P (f);
int value;
- bool sticky;
- bool not_hidden = x_get_current_wm_state (f, event->xmap.window, &value, &sticky);
+ bool sticky, shaded;
+ bool not_hidden = x_get_current_wm_state (f, event->xmap.window, &value, &sticky,
+ &shaded);
if (CONSP (frame_size_history))
frame_size_history_extra
dpyinfo->Xatom_net_wm_state_sticky, None);
}
+void
+x_set_shaded (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
+{
+ Lisp_Object frame;
+ struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+
+ XSETFRAME (frame, f);
+
+ set_wm_state (frame, !NILP (new_value),
+ dpyinfo->Xatom_net_wm_state_shaded, None);
+}
+
/**
* x_set_skip_taskbar:
*
x_get_current_wm_state (struct frame *f,
Window window,
int *size_state,
- bool *sticky)
+ bool *sticky,
+ bool *shaded)
{
unsigned long actual_size;
int i;
*sticky = false;
*size_state = FULLSCREEN_NONE;
+ *shaded = false;
block_input ();
*size_state = FULLSCREEN_BOTH;
else if (a == dpyinfo->Xatom_net_wm_state_sticky)
*sticky = true;
+ else if (a == dpyinfo->Xatom_net_wm_state_shaded)
+ *shaded = true;
}
#ifdef USE_XCB
int cur;
bool dummy;
- x_get_current_wm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy);
+ x_get_current_wm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy, &dummy);
/* Some window managers don't say they support _NET_WM_STATE, but they do say
they support _NET_WM_STATE_FULLSCREEN. Try that also. */
{
int value = FULLSCREEN_NONE;
Lisp_Object lval;
- bool sticky = false;
- bool not_hidden = x_get_current_wm_state (f, event->window, &value, &sticky);
+ bool sticky = false, shaded = false;
+ bool not_hidden = x_get_current_wm_state (f, event->window,
+ &value, &sticky,
+ &shaded);
lval = Qnil;
switch (value)
store_frame_param (f, Qfullscreen, lval);
store_frame_param (f, Qsticky, sticky ? Qt : Qnil);
+ store_frame_param (f, Qshaded, shaded ? Qt : Qnil);
return not_hidden;
}
ATOM_REFS_INIT ("_NET_WM_STATE_MAXIMIZED_VERT",
Xatom_net_wm_state_maximized_vert)
ATOM_REFS_INIT ("_NET_WM_STATE_STICKY", Xatom_net_wm_state_sticky)
+ ATOM_REFS_INIT ("_NET_WM_STATE_SHADED", Xatom_net_wm_state_shaded)
ATOM_REFS_INIT ("_NET_WM_STATE_HIDDEN", Xatom_net_wm_state_hidden)
ATOM_REFS_INIT ("_NET_WM_WINDOW_TYPE", Xatom_net_window_type)
ATOM_REFS_INIT ("_NET_WM_WINDOW_TYPE_TOOLTIP",
Xatom_net_wm_state_maximized_horz, Xatom_net_wm_state_maximized_vert,
Xatom_net_wm_state_sticky, Xatom_net_wm_state_above, Xatom_net_wm_state_below,
Xatom_net_wm_state_hidden, Xatom_net_wm_state_skip_taskbar,
- Xatom_net_frame_extents, Xatom_net_current_desktop, Xatom_net_workarea,
- Xatom_net_wm_opaque_region, Xatom_net_wm_ping, Xatom_net_wm_sync_request,
- Xatom_net_wm_sync_request_counter, Xatom_net_wm_frame_drawn,
- Xatom_net_wm_user_time, Xatom_net_wm_user_time_window;
+ Xatom_net_wm_state_shaded, Xatom_net_frame_extents, Xatom_net_current_desktop,
+ Xatom_net_workarea, Xatom_net_wm_opaque_region, Xatom_net_wm_ping,
+ Xatom_net_wm_sync_request, Xatom_net_wm_sync_request_counter,
+ Xatom_net_wm_frame_drawn, Xatom_net_wm_user_time,
+ Xatom_net_wm_user_time_window;
/* XSettings atoms and windows. */
Atom Xatom_xsettings_sel, Xatom_xsettings_prop, Xatom_xsettings_mgr;
}
extern void x_set_sticky (struct frame *, Lisp_Object, Lisp_Object);
+extern void x_set_shaded (struct frame *, Lisp_Object, Lisp_Object);
extern void x_set_skip_taskbar (struct frame *, Lisp_Object, Lisp_Object);
extern void x_set_z_group (struct frame *, Lisp_Object, Lisp_Object);
extern bool x_wm_supports (struct frame *, Atom);