CTWM
Loading...
Searching...
No Matches
/usr/src/RPM/BUILD/ctwm-4.1.0/ewmh.c File Reference
#include "ctwm.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
#include <assert.h>
#include <X11/Xatom.h>
#include <X11/extensions/shape.h>
#include "ctwm_atoms.h"
#include "ctwm_shutdown.h"
#include "ewmh_atoms.h"
#include "screen.h"
#include "events.h"
#include "event_handlers.h"
#include "functions_defs.h"
#include "icons.h"
#include "otp.h"
#include "image.h"
#include "list.h"
#include "functions.h"
#include "occupation.h"
#include "r_layout.h"
#include "util.h"
#include "vscreen.h"
#include "win_iconify.h"
#include "win_ops.h"
#include "win_resize.h"
#include "win_utils.h"
#include "workspace_utils.h"
Include dependency graph for ewmh.c:

Go to the source code of this file.

Macros

#define NET_WM_STATE_REMOVE   0
#define NET_WM_STATE_ADD   1
#define NET_WM_STATE_TOGGLE   2
#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT   0
#define _NET_WM_MOVERESIZE_SIZE_TOP   1
#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT   2
#define _NET_WM_MOVERESIZE_SIZE_RIGHT   3
#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT   4
#define _NET_WM_MOVERESIZE_SIZE_BOTTOM   5
#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT   6
#define _NET_WM_MOVERESIZE_SIZE_LEFT   7
#define _NET_WM_MOVERESIZE_MOVE   8
#define _NET_WM_MOVERESIZE_SIZE_KEYBOARD   9
#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD   10
#define _NET_WM_MOVERESIZE_CANCEL   11
#define ALL_WORKSPACES   0xFFFFFFFFU
#define CRWARN(x)
#define CHKNRET(st)
#define DOBIT(fld)

Functions

static ImageExtractIcon (ScreenInfo *scr, unsigned long *prop, int width, int height)
static void EwmhClientMessage_NET_WM_DESKTOP (XClientMessageEvent *msg)
static void EwmhClientMessage_NET_WM_STATE (XClientMessageEvent *msg)
static void EwmhClientMessage_NET_ACTIVE_WINDOW (XClientMessageEvent *msg)
static void EwmhClientMessage_NET_WM_MOVERESIZE (XClientMessageEvent *msg)
static void EwmhClientMessage_NET_CLOSE_WINDOW (XClientMessageEvent *msg)
static XEvent synth_btnevent_for_moveresize (TwmWindow *twm_win)
static unsigned long EwmhGetWindowProperty (Window w, Atom name, Atom type)
static void EwmhGetStrut (TwmWindow *twm_win, bool update)
static void EwmhRemoveStrut (TwmWindow *twm_win)
static void EwmhSet_NET_WORKAREA (ScreenInfo *scr)
static int EwmhGet_NET_WM_STATE (TwmWindow *twm_win)
static void EwmhClientMessage_NET_WM_STATEchange (TwmWindow *twm_win, int change, int newVal)
static void SendPropertyMessage (Window to, Window about, Atom messagetype, long l0, long l1, long l2, long l3, long l4, long mask)
static void EwmhInitAtoms (void)
static int CatchError (Display *display, XErrorEvent *event)
void EwmhInit (void)
static void GenerateTimestamp (ScreenInfo *scr)
static bool EwmhReplaceWM (ScreenInfo *scr)
bool EwmhInitScreenEarly (ScreenInfo *scr)
void EwmhInitScreenLate (ScreenInfo *scr)
static void EwmhTerminateScreen (ScreenInfo *scr)
void EwmhTerminate (void)
void EwmhSelectionClear (XSelectionClearEvent *sev)
bool EwmhClientMessage (XClientMessageEvent *msg)
ImageEwmhGetIcon (ScreenInfo *scr, TwmWindow *twm_win)
static void convert_for_16 (int w, int x, int y, int argb)
static void convert_for_32 (int w, int x, int y, int argb)
static void EwmhHandle_NET_WM_ICONNotify (XPropertyEvent *event, TwmWindow *twm_win)
static void EwmhHandle_NET_WM_STRUTNotify (XPropertyEvent *event, TwmWindow *twm_win)
static int atomToFlag (Atom a)
int EwmhHandlePropertyNotify (XPropertyEvent *event, TwmWindow *twm_win)
void EwmhSet_NET_WM_DESKTOP (TwmWindow *twm_win)
void EwmhSet_NET_WM_DESKTOP_ws (TwmWindow *twm_win, WorkSpace *ws)
static unsigned long * EwmhGetWindowProperties (Window w, Atom name, Atom type, unsigned long *nitems_return)
int EwmhGetOccupation (TwmWindow *twm_win)
void EwmhUnmapNotify (TwmWindow *twm_win)
void EwmhAddClientWindow (TwmWindow *new_win)
void EwmhDeleteClientWindow (TwmWindow *old_win)
void EwmhSet_NET_CLIENT_LIST_STACKING (void)
void EwmhSet_NET_ACTIVE_WINDOW (Window w)
void EwmhGetProperties (TwmWindow *twm_win)
int EwmhGetInitPriority (TwmWindow *twm_win)
bool EwmhHasBorder (TwmWindow *twm_win)
bool EwmhHasTitle (TwmWindow *twm_win)
bool EwmhOnWindowRing (TwmWindow *twm_win)
static void EwmhRecalculateStrut (void)
void EwmhSet_NET_FRAME_EXTENTS (TwmWindow *twm_win)
 Set _NET_FRAME_EXTENTS property.
void EwmhSet_NET_SHOWING_DESKTOP (int state)
void EwmhSet_NET_WM_STATE (TwmWindow *twm_win, int changes)

Variables

Atom XEWMHAtom [NUM_EWMH_XATOMS]
static bool caughtError
static uint16_t * buffer_16bpp
static uint32_t * buffer_32bpp

Macro Definition Documentation

◆ _NET_WM_MOVERESIZE_CANCEL

#define _NET_WM_MOVERESIZE_CANCEL   11

Definition at line 78 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_MOVE

#define _NET_WM_MOVERESIZE_MOVE   8

Definition at line 75 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_MOVE_KEYBOARD

#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD   10

Definition at line 77 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_BOTTOM

#define _NET_WM_MOVERESIZE_SIZE_BOTTOM   5

Definition at line 72 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT

#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT   6

Definition at line 73 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT

#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT   4

Definition at line 71 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_KEYBOARD

#define _NET_WM_MOVERESIZE_SIZE_KEYBOARD   9

Definition at line 76 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_LEFT

#define _NET_WM_MOVERESIZE_SIZE_LEFT   7

Definition at line 74 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_RIGHT

#define _NET_WM_MOVERESIZE_SIZE_RIGHT   3

Definition at line 70 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_TOP

#define _NET_WM_MOVERESIZE_SIZE_TOP   1

Definition at line 68 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_TOPLEFT

#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT   0

Definition at line 67 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ _NET_WM_MOVERESIZE_SIZE_TOPRIGHT

#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT   2

Definition at line 69 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_MOVERESIZE().

◆ ALL_WORKSPACES

#define ALL_WORKSPACES   0xFFFFFFFFU

◆ CHKNRET

#define CHKNRET ( st)
Value:
if(a == XA__NET_WM_##st) { \
if(LookInNameList(Scr->EWMHIgnore, #st)) { \
CRWARN(st); \
return 0; \
} \
return EWMH_##st; \
}
#define Scr
void * LookInNameList(name_list *list_head, const char *name)
Definition list.c:130

Referenced by atomToFlag().

◆ CRWARN

#define CRWARN ( x)
Value:
(void)0

◆ DOBIT

#define DOBIT ( fld)
Value:
do { \
if(change & EWMH_STATE_##fld) { omask |= OTP_AFLAG_##fld; } \
if(newValue & EWMH_STATE_##fld) { oval |= OTP_AFLAG_##fld; } \
} while(0)

Referenced by EwmhClientMessage_NET_WM_STATEchange().

◆ NET_WM_STATE_ADD

#define NET_WM_STATE_ADD   1

Definition at line 64 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_STATE().

◆ NET_WM_STATE_REMOVE

#define NET_WM_STATE_REMOVE   0

Definition at line 63 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_STATE().

◆ NET_WM_STATE_TOGGLE

#define NET_WM_STATE_TOGGLE   2

Definition at line 65 of file ewmh.c.

Referenced by EwmhClientMessage_NET_WM_STATE().

Function Documentation

◆ atomToFlag()

int atomToFlag ( Atom a)
static

Definition at line 1027 of file ewmh.c.

References atomToFlag(), and CHKNRET.

Referenced by atomToFlag(), EwmhClientMessage_NET_WM_STATE(), and EwmhGet_NET_WM_STATE().

◆ CatchError()

int CatchError ( Display * display,
XErrorEvent * event )
static

Definition at line 126 of file ewmh.c.

References CatchError(), and caughtError.

Referenced by CatchError(), and EwmhReplaceWM().

◆ convert_for_16()

void convert_for_16 ( int w,
int x,
int y,
int argb )
static

Definition at line 838 of file ewmh.c.

References buffer_16bpp, and convert_for_16().

Referenced by convert_for_16(), convert_for_16(), ExtractIcon(), and LoadJpegImage().

◆ convert_for_32()

void convert_for_32 ( int w,
int x,
int y,
int argb )
static

Definition at line 846 of file ewmh.c.

References buffer_32bpp, and convert_for_32().

Referenced by convert_for_32(), convert_for_32(), ExtractIcon(), and LoadJpegImage().

◆ EwmhAddClientWindow()

void EwmhAddClientWindow ( TwmWindow * new_win)

◆ EwmhClientMessage()

◆ EwmhClientMessage_NET_ACTIVE_WINDOW()

void EwmhClientMessage_NET_ACTIVE_WINDOW ( XClientMessageEvent * msg)
static

◆ EwmhClientMessage_NET_CLOSE_WINDOW()

void EwmhClientMessage_NET_CLOSE_WINDOW ( XClientMessageEvent * msg)
static

◆ EwmhClientMessage_NET_WM_DESKTOP()

◆ EwmhClientMessage_NET_WM_MOVERESIZE()

◆ EwmhClientMessage_NET_WM_STATE()

◆ EwmhClientMessage_NET_WM_STATEchange()

◆ EwmhDeleteClientWindow()

void EwmhDeleteClientWindow ( TwmWindow * old_win)

◆ EwmhGet_NET_WM_STATE()

int EwmhGet_NET_WM_STATE ( TwmWindow * twm_win)
static

◆ EwmhGetIcon()

Image * EwmhGetIcon ( ScreenInfo * scr,
TwmWindow * twm_win )

◆ EwmhGetInitPriority()

int EwmhGetInitPriority ( TwmWindow * twm_win)

Definition at line 1864 of file ewmh.c.

References EWMH_PRI_DESKTOP, EWMH_PRI_DOCK, EwmhGetInitPriority(), wt_Desktop, and wt_Dock.

Referenced by AddNewOwl(), and EwmhGetInitPriority().

◆ EwmhGetOccupation()

int EwmhGetOccupation ( TwmWindow * twm_win)

◆ EwmhGetProperties()

◆ EwmhGetStrut()

◆ EwmhGetWindowProperties()

unsigned long * EwmhGetWindowProperties ( Window w,
Atom name,
Atom type,
unsigned long * nitems_return )
static

◆ EwmhGetWindowProperty()

unsigned long EwmhGetWindowProperty ( Window w,
Atom name,
Atom type )
static

Definition at line 1541 of file ewmh.c.

References dpy, and EwmhGetWindowProperty().

Referenced by EwmhGetProperties(), and EwmhGetWindowProperty().

◆ EwmhHandle_NET_WM_ICONNotify()

◆ EwmhHandle_NET_WM_STRUTNotify()

void EwmhHandle_NET_WM_STRUTNotify ( XPropertyEvent * event,
TwmWindow * twm_win )
static

◆ EwmhHandlePropertyNotify()

◆ EwmhHasBorder()

bool EwmhHasBorder ( TwmWindow * twm_win)

Definition at line 1876 of file ewmh.c.

References EwmhHasBorder(), wt_Desktop, and wt_Dock.

Referenced by AddWindow(), and EwmhHasBorder().

◆ EwmhHasTitle()

bool EwmhHasTitle ( TwmWindow * twm_win)

Definition at line 1887 of file ewmh.c.

References EwmhHasTitle(), wt_Desktop, and wt_Dock.

Referenced by AddWindow(), and EwmhHasTitle().

◆ EwmhInit()

void EwmhInit ( void )

Definition at line 132 of file ewmh.c.

References EwmhInit(), and EwmhInitAtoms().

Referenced by ctwm_main(), and EwmhInit().

◆ EwmhInitAtoms()

void EwmhInitAtoms ( void )
static

Definition at line 119 of file ewmh.c.

References dpy, EwmhInitAtoms(), and XEWMHAtom.

Referenced by EwmhInit(), and EwmhInitAtoms().

◆ EwmhInitScreenEarly()

bool EwmhInitScreenEarly ( ScreenInfo * scr)

Definition at line 307 of file ewmh.c.

References dpy, EwmhInitScreenEarly(), EwmhReplaceWM(), and ScreenInfo::XineramaRoot.

Referenced by EwmhInitScreenEarly(), and takeover_screen().

◆ EwmhInitScreenLate()

◆ EwmhOnWindowRing()

bool EwmhOnWindowRing ( TwmWindow * twm_win)

Definition at line 1898 of file ewmh.c.

References EwmhOnWindowRing(), wt_Desktop, and wt_Dock.

Referenced by AddWindow(), and EwmhOnWindowRing().

◆ EwmhRecalculateStrut()

◆ EwmhRemoveStrut()

void EwmhRemoveStrut ( TwmWindow * twm_win)
static

◆ EwmhReplaceWM()

◆ EwmhSelectionClear()

void EwmhSelectionClear ( XSelectionClearEvent * sev)

Definition at line 546 of file ewmh.c.

References DoShutdown(), and EwmhSelectionClear().

Referenced by EwmhSelectionClear().

◆ EwmhSet_NET_ACTIVE_WINDOW()

void EwmhSet_NET_ACTIVE_WINDOW ( Window w)

Definition at line 1823 of file ewmh.c.

References dpy, EwmhSet_NET_ACTIVE_WINDOW(), and Scr.

Referenced by EwmhSet_NET_ACTIVE_WINDOW(), and SetFocus().

◆ EwmhSet_NET_CLIENT_LIST_STACKING()

◆ EwmhSet_NET_FRAME_EXTENTS()

void EwmhSet_NET_FRAME_EXTENTS ( TwmWindow * twm_win)

Set _NET_FRAME_EXTENTS property.

This tells the client how much space is being taken up by the window decorations. Some clients may need this information to position other windows on top of themselves. e.g., Firefox's form autofill and context menu will be positioned a bit wrong (high, by the height of the titlebar) without this.

Definition at line 2099 of file ewmh.c.

References dpy, EwmhSet_NET_FRAME_EXTENTS(), TwmWindow::frame_bw, TwmWindow::frame_bw3D, TwmWindow::title_height, and TwmWindow::w.

Referenced by AddWindow(), and EwmhSet_NET_FRAME_EXTENTS().

◆ EwmhSet_NET_SHOWING_DESKTOP()

void EwmhSet_NET_SHOWING_DESKTOP ( int state)

Definition at line 2116 of file ewmh.c.

References dpy, EwmhSet_NET_SHOWING_DESKTOP(), and Scr.

Referenced by EwmhInitScreenLate(), EwmhSet_NET_SHOWING_DESKTOP(), and ShowBackground().

◆ EwmhSet_NET_WM_DESKTOP()

◆ EwmhSet_NET_WM_DESKTOP_ws()

◆ EwmhSet_NET_WM_STATE()

◆ EwmhSet_NET_WORKAREA()

◆ EwmhTerminate()

void EwmhTerminate ( void )

Definition at line 528 of file ewmh.c.

References EwmhTerminate(), EwmhTerminateScreen(), NumScreens, and ScreenList.

Referenced by DoShutdown(), and EwmhTerminate().

◆ EwmhTerminateScreen()

void EwmhTerminateScreen ( ScreenInfo * scr)
static

Definition at line 512 of file ewmh.c.

References dpy, EwmhTerminateScreen(), and ScreenInfo::XineramaRoot.

Referenced by EwmhTerminate(), and EwmhTerminateScreen().

◆ EwmhUnmapNotify()

void EwmhUnmapNotify ( TwmWindow * twm_win)

Definition at line 1689 of file ewmh.c.

References dpy, EwmhUnmapNotify(), and TwmWindow::w.

Referenced by EwmhUnmapNotify(), and HandleUnmapNotify().

◆ ExtractIcon()

Image * ExtractIcon ( ScreenInfo * scr,
unsigned long * prop,
int width,
int height )
static

◆ GenerateTimestamp()

void GenerateTimestamp ( ScreenInfo * scr)
static

Definition at line 144 of file ewmh.c.

References dpy, EventTime, and GenerateTimestamp().

Referenced by EwmhReplaceWM(), and GenerateTimestamp().

◆ SendPropertyMessage()

void SendPropertyMessage ( Window to,
Window about,
Atom messagetype,
long l0,
long l1,
long l2,
long l3,
long l4,
long mask )
static

Definition at line 98 of file ewmh.c.

References dpy, and SendPropertyMessage().

Referenced by EwmhReplaceWM(), and SendPropertyMessage().

◆ synth_btnevent_for_moveresize()

Variable Documentation

◆ buffer_16bpp

uint16_t* buffer_16bpp
static

Definition at line 835 of file ewmh.c.

Referenced by convert_for_16(), convert_for_16(), ExtractIcon(), and LoadJpegImage().

◆ buffer_32bpp

uint32_t* buffer_32bpp
static

Definition at line 836 of file ewmh.c.

Referenced by convert_for_32(), convert_for_32(), ExtractIcon(), and LoadJpegImage().

◆ caughtError

bool caughtError
static

Definition at line 124 of file ewmh.c.

Referenced by CatchError(), and EwmhReplaceWM().

◆ XEWMHAtom

Atom XEWMHAtom[NUM_EWMH_XATOMS]

Definition at line 61 of file ewmh.c.

Referenced by EwmhInitAtoms().