/* Generic header info common to X backends for GNUstep Copyright (C) 2000 Free Software Foundation, Inc. Written by: Richard Frith-Macdonald Date: Mar 2000 This file is part of the GNUstep project This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; see the file COPYING.LIB. If not, see or write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef INCLUDED_XGGENERIC_H #define INCLUDED_XGGENERIC_H /* * Flags to indicate which protocols the WindowManager follows */ typedef enum { XGWM_UNKNOWN = 0, XGWM_WINDOWMAKER = 1, XGWM_GNOME = 2, XGWM_EWMH = 8 } XGWMProtocols; static char *atom_names[] = { "TEXT", "UTF8_STRING", "WM_PROTOCOLS", "WM_TAKE_FOCUS", "WM_DELETE_WINDOW", "WM_STATE", "_NET_WM_PING", "_NET_WM_SYNC_REQUEST", "_NET_WM_SYNC_REQUEST_COUNTER", "_NET_WM_WINDOW_TYPE", "_NET_WM_WINDOW_TYPE_DESKTOP", "_NET_WM_WINDOW_TYPE_DOCK", "_NET_WM_WINDOW_TYPE_TOOLBAR", "_NET_WM_WINDOW_TYPE_MENU", "_NET_WM_WINDOW_TYPE_DIALOG", "_NET_WM_WINDOW_TYPE_NORMAL", // New in wmspec 1.2 "_NET_WM_WINDOW_TYPE_UTILITY", "_NET_WM_WINDOW_TYPE_SPLASH", // New in wmspec 1.4 "_NET_WM_WINDOW_TYPE_POPUP_MENU", "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", "_NET_WM_WINDOW_TYPE_TOOLTIP", "_NET_WM_WINDOW_TYPE_NOTIFICATION", "_NET_WM_WINDOW_TYPE_COMBO", "_NET_WM_WINDOW_TYPE_DND", //KDE extensions "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", // Window state "_NET_WM_STATE", "_NET_WM_STATE_MODAL", "_NET_WM_STATE_STICKY", "_NET_WM_STATE_MAXIMIZED_VERT", "_NET_WM_STATE_MAXIMIZED_HORZ", "_NET_WM_STATE_SHADED", "_NET_WM_STATE_SKIP_TASKBAR", "_NET_WM_STATE_SKIP_PAGER", "_NET_WM_STATE_HIDDEN", "_NET_WM_STATE_FULLSCREEN", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_BELOW", "_NET_WM_STATE_DEMANDS_ATTENTION", "_NET_WM_NAME", "_NET_WM_PID", "_NET_WM_ICON", "_NET_WM_ICON_NAME", "_NET_WM_DESKTOP", "_NET_WM_WINDOW_SHADOW", "_NET_WM_USER_TIME", "_NET_WM_WINDOW_OPACITY", "_MOTIF_WM_HINTS", "_NET_SUPPORTED", "_NET_FRAME_EXTENTS", "_NET_REQUEST_FRAME_EXTENTS", "_KDE_NET_WM_FRAME_STRUT", "_WIN_SUPPORTING_WM_CHECK", "_NET_SUPPORTING_WM_CHECK", "_NET_DESKTOP_NAMES", "_NET_CURRENT_DESKTOP", "_NET_NUMBER_OF_DESKTOPS", "_NET_CLIENT_LIST_STACKING", "_NET_ACTIVE_WINDOW", "_WIN_LAYER", "_WINDOWMAKER_WM_PROTOCOLS", "_WINDOWMAKER_NOTICEBOARD", "_WINDOWMAKER_ICON_TILE", "_WINDOWMAKER_WM_FUNCTION", "_RGBA_IMAGE", "_GNUSTEP_WM_MINIATURIZE_WINDOW", "_GNUSTEP_WM_HIDE_APP", "_GNUSTEP_WM_ATTR", "_GNUSTEP_TITLEBAR_STATE", "_GNUSTEP_FRAME_OFFSETS", "WM_IGNORE_FOCUS_EVENTS" }; /* * Macros to access elements in atom_names array. */ #define TEXT_ATOM atoms[0] #define UTF8_STRING_ATOM atoms[1] #define WM_PROTOCOLS_ATOM atoms[2] #define WM_TAKE_FOCUS_ATOM atoms[3] #define WM_DELETE_WINDOW_ATOM atoms[4] #define WM_STATE_ATOM atoms[5] #define _NET_WM_PING_ATOM atoms[6] #define _NET_WM_SYNC_REQUEST_ATOM atoms[7] #define _NET_WM_SYNC_REQUEST_COUNTER_ATOM atoms[8] #define _NET_WM_WINDOW_TYPE_ATOM atoms[9] #define _NET_WM_WINDOW_TYPE_DESKTOP_ATOM atoms[10] #define _NET_WM_WINDOW_TYPE_DOCK_ATOM atoms[11] #define _NET_WM_WINDOW_TYPE_TOOLBAR_ATOM atoms[12] #define _NET_WM_WINDOW_TYPE_MENU_ATOM atoms[13] #define _NET_WM_WINDOW_TYPE_DIALOG_ATOM atoms[14] #define _NET_WM_WINDOW_TYPE_NORMAL_ATOM atoms[15] #define _NET_WM_WINDOW_TYPE_UTILITY_ATOM atoms[16] #define _NET_WM_WINDOW_TYPE_SPLASH_ATOM atoms[17] #define _NET_WM_WINDOW_TYPE_POPUP_MENU_ATOM atoms[18] #define _NET_WM_WINDOW_TYPE_DROPDOWN_MENU_ATOM atoms[19] #define _NET_WM_WINDOW_TYPE_TOOLTIP_ATOM atoms[20] #define _NET_WM_WINDOW_TYPE_NOTIFICATION_ATOM atoms[21] #define _NET_WM_WINDOW_TYPE_COMBO_ATOM atoms[22] #define _NET_WM_WINDOW_TYPE_DND_ATOM atoms[23] #define _KDE_NET_WM_WINDOW_TYPE_OVERRIDE_ATOM atoms[24] #define _NET_WM_STATE_ATOM atoms[25] #define _NET_WM_STATE_MODAL_ATOM atoms[26] #define _NET_WM_STATE_STICKY_ATOM atoms[27] #define _NET_WM_STATE_MAXIMIZED_VERT_ATOM atoms[28] #define _NET_WM_STATE_MAXIMIZED_HORZ_ATOM atoms[29] #define _NET_WM_STATE_SHADED_ATOM atoms[30] #define _NET_WM_STATE_SKIP_TASKBAR_ATOM atoms[31] #define _NET_WM_STATE_SKIP_PAGER_ATOM atoms[32] #define _NET_WM_STATE_HIDDEN_ATOM atoms[33] #define _NET_WM_STATE_FULLSCREEN_ATOM atoms[34] #define _NET_WM_STATE_ABOVE_ATOM atoms[35] #define _NET_WM_STATE_BELOW_ATOM atoms[36] #define _NET_WM_STATE_DEMANDS_ATTENTION_ATOM atoms[37] #define _NET_WM_NAME_ATOM atoms[38] #define _NET_WM_PID_ATOM atoms[39] #define _NET_WM_ICON_ATOM atoms[40] #define _NET_WM_ICON_NAME_ATOM atoms[41] #define _NET_WM_DESKTOP_ATOM atoms[42] #define _NET_WM_WINDOW_SHADOW_ATOM atoms[43] #define _NET_WM_USER_TIME_ATOM atoms[44] #define _NET_WM_WINDOW_OPACITY_ATOM atoms[45] #define _MOTIF_WM_HINTS_ATOM atoms[46] #define _NET_SUPPORTED_ATOM atoms[47] #define _NET_FRAME_EXTENTS_ATOM atoms[48] #define _NET_REQUEST_FRAME_EXTENTS_ATOM atoms[49] #define _KDE_NET_WM_FRAME_STRUT_ATOM atoms[50] #define _WIN_SUPPORTING_WM_CHECK_ATOM atoms[51] #define _NET_SUPPORTING_WM_CHECK_ATOM atoms[52] #define _NET_DESKTOP_NAMES_ATOM atoms[53] #define _NET_CURRENT_DESKTOP_ATOM atoms[54] #define _NET_NUMBER_OF_DESKTOPS_ATOM atoms[55] #define _NET_CLIENT_LIST_STACKING_ATOM atoms[56] #define _NET_ACTIVE_WINDOW_ATOM atoms[57] #define _WIN_LAYER_ATOM atoms[58] #define _WINDOWMAKER_WM_PROTOCOLS_ATOM atoms[59] #define _WINDOWMAKER_NOTICEBOARD_ATOM atoms[60] #define _WINDOWMAKER_ICON_TILE_ATOM atoms[61] #define _WINDOWMAKER_WM_FUNCTION_ATOM atoms[62] #define _RGBA_IMAGE_ATOM atoms[63] #define _GNUSTEP_WM_MINIATURIZE_WINDOW_ATOM atoms[64] #define _GNUSTEP_WM_HIDE_APP_ATOM atoms[65] #define _GNUSTEP_WM_ATTR_ATOM atoms[66] #define _GNUSTEP_TITLEBAR_STATE_ATOM atoms[67] #define _GNUSTEP_FRAME_OFFSETS_ATOM atoms[68] #define WM_IGNORE_FOCUS_EVENTS_ATOM atoms[69] /* * Frame offsets for window inside parent decoration window. */ typedef struct { short l; // offset from left short r; // offset from right short t; // offset from top short b; // offset from bottom BOOL known; // obtained from Reparent event or just guessed? } Offsets; /* * Structure containing ivars that are common to all X backend contexts. */ struct XGGeneric { int wm; struct { unsigned useWindowMakerIcons:1; unsigned appOwnsMiniwindow:1; unsigned doubleParentWindow:1; } flags; // Time of last X event Time lastTime; // Approximate local time for last X event, used to decide // if the last X event time is still valid. NSTimeInterval lastTimeStamp; // last reference time on X server, used to prevent time drift between // local machine and X server. Time baseXServerTime; Time lastClick; Window lastClickWindow; int lastClickX; int lastClickY; Time lastMotion; // Name for application root window. char *rootName; long currentFocusWindow; long desiredFocusWindow; unsigned long focusRequestNumber; unsigned char lMouse; unsigned char mMouse; unsigned char rMouse; unsigned char upMouse; unsigned char downMouse; unsigned char scrollLeftMouse; unsigned char scrollRightMouse; int lMouseMask; int mMouseMask; int rMouseMask; Window appRootWindow; void *cachedWindow; // last gswindow_device_t used. Offsets offsets[16]; Atom atoms[sizeof(atom_names)/sizeof(char*)]; }; /* GNOME Window layers */ #define WIN_LAYER_DESKTOP 0 #define WIN_LAYER_BELOW 2 #define WIN_LAYER_NORMAL 4 #define WIN_LAYER_ONTOP 6 #define WIN_LAYER_DOCK 8 #define WIN_LAYER_ABOVE_DOCK 10 #define WIN_LAYER_MENU 12 /* NET WM State */ #define _NET_WM_STATE_REMOVE 0 /* remove/unset property */ #define _NET_WM_STATE_ADD 1 /* add/set property */ #define _NET_WM_STATE_TOGGLE 2 /* toggle property */ #endif