diff options
author | Jan Holesovsky <kendy@suse.cz> | 2011-04-22 15:09:06 +0200 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2011-04-22 15:09:06 +0200 |
commit | 83380a7805f69b18f432895fc17c53cf0354bf4d (patch) | |
tree | b38d271cb6a768b6c2f9d3bee37d0d88e0472cb4 /vcl/inc/unx/wmadaptor.hxx | |
parent | d5bbd70673a2d5c6f8937428b97111e9c13fd21f (diff) | |
parent | 9e84958536c737f8fdcff4d28664d0c13b9cdc8c (diff) |
Merge commit 'ooo/DEV300_m106' into libreoffice-3-4
Conflicts:
cppcanvas/source/mtfrenderer/transparencygroupaction.cxx
l10ntools/scripts/localize.pl
l10ntools/source/directory.cxx
l10ntools/source/srciter.cxx
padmin/Executable_spadmin.bin.mk
padmin/Library_spa.mk
svtools/inc/svtools/filter.hxx
svtools/inc/svtools/grfmgr.hxx
svtools/source/filter/filter.cxx
svtools/source/filter/filter2.cxx
svtools/source/filter/wmf/emfwr.cxx
svtools/source/filter/wmf/enhwmf.cxx
svtools/source/filter/wmf/winmtf.cxx
svtools/source/filter/wmf/winmtf.hxx
svtools/source/filter/wmf/winwmf.cxx
svtools/source/filter/wmf/wmfwr.cxx
svtools/source/graphic/grfmgr.cxx
svtools/source/graphic/grfmgr2.cxx
toolkit/source/controls/controlmodelcontainerbase.cxx
toolkit/source/controls/unocontrol.cxx
toolkit/source/helper/formpdfexport.cxx
toolkit/source/helper/unowrapper.cxx
vcl/Package_osx.mk
vcl/aqua/source/app/salinst.cxx
vcl/aqua/source/app/salsys.cxx
vcl/aqua/source/dtrans/aqua_service.cxx
vcl/aqua/source/dtrans/test_aquacb.cxx
vcl/aqua/source/res/makefile.mk
vcl/aqua/source/window/salframe.cxx
vcl/aqua/source/window/salframeview.mm
vcl/inc/aqua/salgdi.h
vcl/inc/aqua/salinst.h
vcl/inc/graphite_adaptors.hxx
vcl/inc/graphite_cache.hxx
vcl/inc/graphite_serverfont.hxx
vcl/inc/impprn.hxx
vcl/inc/svdata.hxx
vcl/inc/unx/i18n_status.hxx
vcl/inc/unx/saldata.hxx
vcl/inc/unx/salfont.h
vcl/inc/unx/salinst.h
vcl/inc/unx/salprn.h
vcl/inc/unx/salsys.h
vcl/inc/unx/sm.hxx
vcl/inc/vcl/gdimtf.hxx
vcl/inc/vcl/graph.hxx
vcl/inc/vcl/outdev.hxx
vcl/inc/vcl/polyscan.hxx
vcl/inc/vcl/svcompat.hxx
vcl/inc/vcl/svgread.hxx
vcl/inc/vcl/unobrok.hxx
vcl/inc/win/salgdi.h
vcl/inc/win/wincomp.hxx
vcl/prj/d.lst
vcl/source/app/dbggui.cxx
vcl/source/app/idlemgr.cxx
vcl/source/app/makefile.mk
vcl/source/app/settings.cxx
vcl/source/app/sound.cxx
vcl/source/app/stdtext.cxx
vcl/source/app/svapp.cxx
vcl/source/app/svdata.cxx
vcl/source/app/svmain.cxx
vcl/source/app/timer.cxx
vcl/source/app/unohelp.cxx
vcl/source/components/dtranscomp.cxx
vcl/source/control/button.cxx
vcl/source/control/combobox.cxx
vcl/source/control/ctrl.cxx
vcl/source/control/edit.cxx
vcl/source/control/field2.cxx
vcl/source/control/ilstbox.cxx
vcl/source/gdi/bitmap.cxx
vcl/source/gdi/bitmapex.cxx
vcl/source/gdi/cvtgrf.cxx
vcl/source/gdi/font.cxx
vcl/source/gdi/image.cxx
vcl/source/gdi/imagerepository.cxx
vcl/source/gdi/impbmp.cxx
vcl/source/gdi/impgraph.cxx
vcl/source/gdi/impimagetree.cxx
vcl/source/gdi/jobset.cxx
vcl/source/gdi/makefile.mk
vcl/source/gdi/metaact.cxx
vcl/source/gdi/outdev.cxx
vcl/source/gdi/outdev2.cxx
vcl/source/gdi/outdev5.cxx
vcl/source/gdi/outdev6.cxx
vcl/source/gdi/outmap.cxx
vcl/source/gdi/polyscan.cxx
vcl/source/gdi/print.cxx
vcl/source/gdi/print2.cxx
vcl/source/gdi/region.cxx
vcl/source/gdi/salgdilayout.cxx
vcl/source/gdi/sallayout.cxx
vcl/source/gdi/svcompat.cxx
vcl/source/gdi/virdev.cxx
vcl/source/glyphs/gcach_ftyp.cxx
vcl/source/glyphs/gcach_vdev.cxx
vcl/source/glyphs/gcach_vdev.hxx
vcl/source/glyphs/graphite_adaptors.cxx
vcl/source/glyphs/graphite_cache.cxx
vcl/source/glyphs/graphite_layout.cxx
vcl/source/glyphs/graphite_serverfont.cxx
vcl/source/glyphs/graphite_textsrc.hxx
vcl/source/glyphs/makefile.mk
vcl/source/src/makefile.mk
vcl/source/window/accel.cxx
vcl/source/window/brdwin.cxx
vcl/source/window/btndlg.cxx
vcl/source/window/dialog.cxx
vcl/source/window/dndevdis.cxx
vcl/source/window/dockmgr.cxx
vcl/source/window/dockwin.cxx
vcl/source/window/floatwin.cxx
vcl/source/window/introwin.cxx
vcl/source/window/keycod.cxx
vcl/source/window/menu.cxx
vcl/source/window/msgbox.cxx
vcl/source/window/scrwnd.cxx
vcl/source/window/split.cxx
vcl/source/window/splitwin.cxx
vcl/source/window/status.cxx
vcl/source/window/syswin.cxx
vcl/source/window/tabpage.cxx
vcl/source/window/toolbox.cxx
vcl/source/window/toolbox2.cxx
vcl/source/window/window.cxx
vcl/source/window/window2.cxx
vcl/source/window/winproc.cxx
vcl/source/window/wrkwin.cxx
vcl/unx/generic/app/i18n_cb.cxx
vcl/unx/generic/app/i18n_ic.cxx
vcl/unx/generic/app/saldata.cxx
vcl/unx/generic/app/saldisp.cxx
vcl/unx/generic/app/salinst.cxx
vcl/unx/generic/app/wmadaptor.cxx
vcl/unx/generic/fontmanager/afm_hash.cpp
vcl/unx/generic/gdi/salbmp.cxx
vcl/unx/generic/gdi/salgdi3.cxx
vcl/unx/generic/gdi/xrender_peer.cxx
vcl/unx/generic/window/salframe.cxx
vcl/unx/generic/window/salobj.cxx
vcl/unx/gtk/a11y/makefile.mk
vcl/unx/gtk/app/gtksys.cxx
vcl/unx/gtk/app/makefile.mk
vcl/unx/gtk/window/gtkframe.cxx
vcl/unx/gtk/window/gtkobject.cxx
vcl/unx/headless/svpinst.cxx
vcl/unx/headless/svpinst.hxx
vcl/unx/headless/svpprn.hxx
vcl/unx/kde/kdedata.cxx
vcl/unx/kde/salnativewidgets-kde.cxx
vcl/unx/kde4/KDESalDisplay.hxx
vcl/unx/kde4/KDEXLib.cxx
vcl/unx/kde4/KDEXLib.hxx
vcl/unx/kde4/VCLKDEApplication.cxx
vcl/unx/kde4/makefile.mk
vcl/unx/source/app/makefile.mk
vcl/unx/source/fontmanager/makefile.mk
vcl/unx/source/gdi/makefile.mk
vcl/unx/source/inc/salcursors.h
vcl/util/linksvp/makefile.mk
vcl/win/source/app/saldata.cxx
vcl/win/source/app/salinst.cxx
vcl/win/source/app/salshl.cxx
vcl/win/source/gdi/makefile.mk
vcl/win/source/gdi/salbmp.cxx
vcl/win/source/gdi/salgdi.cxx
vcl/win/source/gdi/salgdi2.cxx
vcl/win/source/gdi/salgdi3.cxx
vcl/win/source/gdi/salgdi_gdiplus.cxx
vcl/win/source/gdi/salprn.cxx
vcl/win/source/gdi/salvd.cxx
vcl/win/source/gdi/winlayout.cxx
vcl/win/source/window/salframe.cxx
vcl/win/source/window/salmenu.cxx
vcl/win/source/window/salobj.cxx
Diffstat (limited to 'vcl/inc/unx/wmadaptor.hxx')
-rw-r--r-- | vcl/inc/unx/wmadaptor.hxx | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/vcl/inc/unx/wmadaptor.hxx b/vcl/inc/unx/wmadaptor.hxx new file mode 100644 index 000000000000..dc0fe65f290b --- /dev/null +++ b/vcl/inc/unx/wmadaptor.hxx @@ -0,0 +1,355 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _VCL_WMADAPTOR_HXX_ +#define _VCL_WMADAPTOR_HXX_ + +#include <tools/string.hxx> +#include <tools/gen.hxx> +#ifndef _PREX_H +#include <tools/prex.h> +#include <X11/Xlib.h> +#include <tools/postx.h> +#endif +#include <vclpluginapi.h> +#include <vector> + +class SalDisplay; +class X11SalFrame; + +namespace vcl_sal { + +class VCLPLUG_GEN_PUBLIC WMAdaptor +{ +public: + enum WMAtom { + // atoms for types + UTF8_STRING, + + // atoms for extended WM hints + NET_SUPPORTED, + NET_SUPPORTING_WM_CHECK, + NET_WM_NAME, + NET_WM_DESKTOP, + NET_WM_ICON_NAME, + NET_WM_PID, + NET_WM_PING, + NET_WM_STATE, + NET_WM_STATE_MAXIMIZED_HORZ, + NET_WM_STATE_MAXIMIZED_VERT, + NET_WM_STATE_MODAL, + NET_WM_STATE_SHADED, + NET_WM_STATE_SKIP_PAGER, + NET_WM_STATE_SKIP_TASKBAR, + NET_WM_STATE_STAYS_ON_TOP, + NET_WM_STATE_STICKY, + NET_WM_STATE_FULLSCREEN, + NET_WM_STRUT, + NET_WM_STRUT_PARTIAL, + NET_WM_USER_TIME, + NET_WM_WINDOW_TYPE, + NET_WM_WINDOW_TYPE_DESKTOP, + NET_WM_WINDOW_TYPE_DIALOG, + NET_WM_WINDOW_TYPE_DOCK, + NET_WM_WINDOW_TYPE_MENU, + NET_WM_WINDOW_TYPE_NORMAL, + NET_WM_WINDOW_TYPE_TOOLBAR, + KDE_NET_WM_WINDOW_TYPE_OVERRIDE, + NET_WM_WINDOW_TYPE_SPLASH, + NET_WM_WINDOW_TYPE_UTILITY, + NET_NUMBER_OF_DESKTOPS, + NET_CURRENT_DESKTOP, + NET_WORKAREA, + + // atoms for Gnome WM hints + WIN_SUPPORTING_WM_CHECK, + WIN_PROTOCOLS, + WIN_WORKSPACE_COUNT, + WIN_WORKSPACE, + WIN_LAYER, + WIN_STATE, + WIN_HINTS, + WIN_APP_STATE, + WIN_EXPANDED_SIZE, + WIN_ICONS, + WIN_WORKSPACE_NAMES, + WIN_CLIENT_LIST, + + // atoms for general WM hints + WM_STATE, + MOTIF_WM_HINTS, + WM_PROTOCOLS, + WM_DELETE_WINDOW, + WM_TAKE_FOCUS, + WM_SAVE_YOURSELF, + WM_CLIENT_LEADER, + WM_COMMAND, + WM_LOCALE_NAME, + WM_TRANSIENT_FOR, + + // special atoms + SAL_QUITEVENT, + SAL_USEREVENT, + SAL_EXTTEXTEVENT, + SAL_GETTIMEEVENT, + DTWM_IS_RUNNING, + VCL_SYSTEM_SETTINGS, + XSETTINGS, + XEMBED, + XEMBED_INFO, + NetAtomMax + }; + + /* + * flags for frame decoration + */ + static const int decoration_Title = 0x00000001; + static const int decoration_Border = 0x00000002; + static const int decoration_Resize = 0x00000004; + static const int decoration_MinimizeBtn = 0x00000008; + static const int decoration_MaximizeBtn = 0x00000010; + static const int decoration_CloseBtn = 0x00000020; + static const int decoration_All = 0x10000000; + + /* + * window type + */ + enum WMWindowType + { + windowType_Normal, + windowType_ModalDialogue, + windowType_ModelessDialogue, + windowType_Utility, + windowType_Splash, + windowType_Toolbar, + windowType_Dock + }; + +protected: + SalDisplay* m_pSalDisplay; // Display to use + Display* m_pDisplay; // X Display of SalDisplay + String m_aWMName; + Atom m_aWMAtoms[ NetAtomMax]; + int m_nDesktops; + bool m_bEqualWorkAreas; + ::std::vector< Rectangle > + m_aWMWorkAreas; + bool m_bTransientBehaviour; + bool m_bEnableAlwaysOnTopWorks; + bool m_bLegacyPartialFullscreen; + int m_nWinGravity; + int m_nInitWinGravity; + bool m_bWMshouldSwitchWorkspace; + bool m_bWMshouldSwitchWorkspaceInit; + + WMAdaptor( SalDisplay * ) +; + void initAtoms(); + bool getNetWmName(); + + /* + * returns whether this instance is useful + * only useful for createWMAdaptor + */ + virtual bool isValid() const; + + bool getWMshouldSwitchWorkspace() const; +public: + virtual ~WMAdaptor(); + + /* + * creates a vaild WMAdaptor instance for the SalDisplay + */ + static WMAdaptor* createWMAdaptor( SalDisplay* ); + + /* + * may return an empty string if the window manager could + * not be identified. + */ + const String& getWindowManagerName() const + { return m_aWMName; } + + /* + * gets the number of workareas + */ + int getWorkAreaCount() const + { return m_aWMWorkAreas.size(); } + + /* + * gets the current work area/desktop number: [0,m_nDesktops[ or -1 if unknown + */ + int getCurrentWorkArea() const; + /* + * gets the workarea the specified window is on (or -1) + */ + int getWindowWorkArea( XLIB_Window aWindow ) const; + /* + * gets the specified workarea + */ + const Rectangle& getWorkArea( int n ) const + { return m_aWMWorkAreas[n]; } + + /* + * attemp to switch the desktop to a certain workarea + * if bConsiderWM is true, then on some WMs the call will not result in any action + */ + void switchToWorkArea( int nWorkArea, bool bConsiderWM = true ) const; + + /* + * sets window title + */ + virtual void setWMName( X11SalFrame* pFrame, const String& rWMName ) const; + + /* + * set NET_WM_PID + */ + virtual void setPID( X11SalFrame* pFrame ) const; + + /* + * set WM_CLIENT_MACHINE + */ + virtual void setClientMachine( X11SalFrame* pFrame ) const; + + virtual void answerPing( X11SalFrame*, XClientMessageEvent* ) const; + + /* + * maximizes frame + * maximization can be toggled in either direction + * to get the original position and size + * use maximizeFrame( pFrame, false, false ) + */ + virtual void maximizeFrame( X11SalFrame* pFrame, bool bHorizontal = true, bool bVertical = true ) const; + /* + * start/stop fullscreen mode on a frame + */ + virtual void showFullScreen( X11SalFrame* pFrame, bool bFullScreen ) const; + /* + * tell whether legacy partial full screen handling is necessary + * see #i107249#: NET_WM_STATE_FULLSCREEN is not well defined, but de facto + * modern WM's interpret it the "right" way, namely they make "full screen" + * taking twin view or Xinerama into accound and honor the positioning hints + * to see which screen actually was meant to use for fullscreen. + */ + bool isLegacyPartialFullscreen() const + { return m_bLegacyPartialFullscreen; } + /* + * set window struts + */ + virtual void setFrameStruts( X11SalFrame*pFrame, + int left, int right, int top, int bottom, + int left_start_y, int left_end_y, + int right_start_y, int right_end_y, + int top_start_x, int top_end_x, + int bottom_start_x, int bottom_end_x ) const; + /* + * set _NET_WM_USER_TIME property, if NetWM + */ + virtual void setUserTime( X11SalFrame* i_pFrame, long i_nUserTime ) const; + + /* + * tells whether fullscreen mode is supported by WM + */ + bool supportsFullScreen() const { return m_aWMAtoms[ NET_WM_STATE_FULLSCREEN ] != 0; } + + /* + * shade/unshade frame + */ + virtual void shade( X11SalFrame* pFrame, bool bToShaded ) const; + + /* + * set hints what decoration is needed; + * must be called before showing the frame + */ + virtual void setFrameTypeAndDecoration( X11SalFrame* pFrame, WMWindowType eType, int nDecorationFlags, X11SalFrame* pTransientFrame = NULL ) const; + + /* + * tells whether there is WM support for splash screens + */ + bool supportsSplash() const { return m_aWMAtoms[ NET_WM_WINDOW_TYPE_SPLASH ] != 0; } + + /* + * tells whteher there is WM support for NET_WM_WINDOW_TYPE_TOOLBAR + */ + bool supportsToolbar() const { return m_aWMAtoms[ NET_WM_WINDOW_TYPE_TOOLBAR ] != 0; } + + /* + * enables always on top or equivalent if possible + */ + virtual void enableAlwaysOnTop( X11SalFrame* pFrame, bool bEnable ) const; + + /* + * tells whether enableAlwaysOnTop actually works with this WM + */ + bool isAlwaysOnTopOK() const { return m_bEnableAlwaysOnTopWorks; } + + /* + * handle WM messages (especially WM state changes) + */ + virtual int handlePropertyNotify( X11SalFrame* pFrame, XPropertyEvent* pEvent ) const; + + /* + * called by SalFrame::Show: time to update state properties + */ + virtual void frameIsMapping( X11SalFrame* ) const; + + /* + * gets a WM atom + */ + Atom getAtom( WMAtom eAtom ) const + { return m_aWMAtoms[ eAtom ]; } + + /* + * supports correct positioning + */ + + virtual bool supportsICCCMPos () const; + + int getPositionWinGravity () const + { return m_nWinGravity; } + int getInitWinGravity() const + { return m_nInitWinGravity; } + + /* + * expected behaviour is that the WM will not allow transient + * windows to get stacked behind the windows they are transient for + */ + bool isTransientBehaviourAsExpected() const + { return m_bTransientBehaviour; } + + /* + * changes the transient hint of a window to reference frame + * if reference frame is NULL the root window is used instead + */ + void changeReferenceFrame( X11SalFrame* pFrame, X11SalFrame* pReferenceFrame ) const; +}; + +} // namespace + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |