/* Net.hh
Copyright © 2003 David Reveman.
This file is part of Waimea.
Waimea is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
Waimea 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 General Public License
for more details.
You should have received a copy of the GNU General Public License
along with Waimea; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#ifndef __NetHandler_hh
#define __NetHandler_hh
extern "C" {
#include <X11/Xlib.h>
#include <X11/Xproto.h>
}
class NetHandler;
#ifndef UrgencyHint
# define UrgencyHint (1L << 8)
#endif // !UrgencyHint
#define MwmHintsDecorations (1L << 1)
#define MwmDecorAll (1L << 0)
#define MwmDecorBorder (1L << 1)
#define MwmDecorHandle (1L << 2)
#define MwmDecorTitle (1L << 3)
#define MwmDecorMenu (1L << 4)
#define MwmDecorMinimize (1L << 5)
#define MwmDecorMaximize (1L << 6)
#define PropMotifWmHintsElements 3
typedef struct {
CARD32 flags;
CARD32 functions;
CARD32 decorations;
} MwmHints;
#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
#include "Waimea.hh"
#include "Window.hh"
class NetHandler {
public:
NetHandler(Waimea *);
void getWMProtocols(WaWindow *);
void getWMHints(WaWindow *);
void getClassHint(WaWindow *);
void getWMClientMachineHint(WaWindow *);
void getTransientForHint(WaWindow *);
void getMWMHints(WaWindow *);
void getWMNormalHints(WaWindow *);
void getState(WaWindow *);
void setState(WaWindow *, int);
void getWmState(WaWindow *);
void setWmState(WaWindow *);
void getVirtualPos(WaWindow *);
void setVirtualPos(WaWindow *);
void getWmStrut(WaWindow *);
void getWmPid(WaWindow *);
void getWmUserTime(WaWindow *);
void getXaName(WaWindow *);
bool getNetName(WaWindow *);
void setVisibleName(WaWindow *);
void removeVisibleName(WaWindow *);
void setDesktop(WaWindow *);
void setDesktopMask(WaWindow *);
void getDesktop(WaWindow *);
void setSupported(WaScreen *);
void setSupportedWMCheck(WaScreen *, Window);
void setClientList(WaScreen *);
void setClientListStacking(WaScreen *);
void getClientListStacking(WaScreen *);
void setActiveWindow(WaScreen *, WaWindow *);
void getActiveWindow(WaScreen *);
void getDesktopViewPort(WaScreen *);
void setDesktopViewPort(WaScreen *);
void setDesktopGeometry(WaScreen *);
void setNumberOfDesktops(WaScreen *);
void setCurrentDesktop(WaScreen *);
void getCurrentDesktop(WaScreen *);
void setDesktopNames(WaScreen *, char *);
void wXDNDMakeAwareness(Window);
void wXDNDClearAwareness(Window);
void setWorkarea(WaScreen *);
void deleteSupported(WaScreen *);
void getXRootPMapId(WaScreen *);
void setXRootPMapId(WaScreen *, WaSurface *);
void getWmType(WaWindow *);
void setAllowedActions(WaWindow *);
void removeAllowedActions(WaWindow *);
void getMergedState(WaWindow *);
void setMergedState(WaWindow *);
void setMergeAtfront(WaWindow *, Window);
void getMergeAtfront(WaWindow *);
void getMergeOrder(WaWindow *);
void setMergeOrder(WaWindow *);
bool isSystrayWindow(Window);
void setSystrayWindows(WaScreen *);
void sendNotify(AWindowObject *, long int, long int = 0, long int = 0);
void getWmIconImage(WaWindow *);
void getWmIconSvg(WaWindow *);
char *getDockappHandler(Dockapp *);
void setDockappHandler(Dockapp *);
void getDockappPrio(Dockapp *);
void setDockappPrio(Dockapp *);
void getConfig(WaScreen *, Window, Atom, unsigned int);
Waimea *waimea;
Display *display;
XSizeHints *size_hints;
XClassHint *classhint;
Atom utf8_string;
Atom wm_protocols, wm_delete_window, wm_take_focus;
Atom wm_state, wm_change_state;
Atom mwm_hints;
Atom net_supported, net_supported_wm_check;
Atom net_client_list, net_client_list_stacking, net_active_window;
Atom net_desktop_viewport, net_desktop_geometry, net_current_desktop,
net_number_of_desktops, net_desktop_names, net_workarea;
Atom net_wm_desktop, net_wm_name, net_wm_visible_name, net_wm_strut,
net_wm_strut_partial, net_wm_pid, net_wm_user_time;
Atom net_wm_state, net_wm_state_sticky, net_wm_state_shaded,
net_wm_state_hidden, net_wm_maximized_vert, net_wm_maximized_horz,
net_wm_state_above, net_wm_state_below, net_wm_state_stays_on_top,
net_wm_state_stays_at_bottom, net_wm_state_fullscreen,
net_wm_state_skip_taskbar;
Atom net_wm_allowed_actions, net_wm_action_move, net_wm_action_resize,
net_wm_action_minimize, net_wm_action_shade, net_wm_action_stick,
net_wm_action_maximize_horz, net_wm_action_maximize_vert,
net_wm_action_fullscreen, net_wm_action_change_desktop,
net_wm_action_close;
Atom 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_splash,
net_wm_window_type_dialog, net_wm_window_type_utility,
net_wm_window_type_normal;
Atom net_close_window, net_moveresize_window, net_wm_moveresize;
Atom net_wm_icon, net_wm_icon_image, net_wm_icon_svg;
Atom waimea_net_wm_state_decor, waimea_net_wm_state_decortitle,
waimea_net_wm_state_decorborder, waimea_net_wm_state_decorhandles;
Atom waimea_net_maximized_restore, waimea_net_virtual_pos,
waimea_net_wm_desktop_mask;
Atom waimea_net_wm_merged_to, waimea_net_wm_merged_type,
waimea_net_wm_merge_order, waimea_net_wm_merge_atfront;
Atom waimea_net_restart, waimea_net_shutdown;
Atom xdndaware, xdndenter, xdndleave;
Atom kde_net_wm_system_tray_window_for, kde_net_system_tray_windows;
Atom xrootpmap_id;
Atom waimea_net_event_notify;
Atom waimea_net_dockapp_holder, waimea_net_dockapp_prio;
Atom waimea_net_cfg;
private:
XClientMessageEvent cme;
int real_format;
Atom real_type;
unsigned long items_read, items_left;
Pixmap waimea_xrootpmap_id;
};
#endif // __NetHandler_hh
syntax highlighted by Code2HTML, v. 0.9.1