You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kdesktop/desktop.h

235 lines
6.0 KiB

/* This file is part of the KDE project
Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef __desktop_h__
#define __desktop_h__
#include "KDesktopIface.h"
#include <tqwidget.h>
#include <tqstringlist.h>
#include <tqvaluevector.h>
#include <kapplication.h> // for logout parameters
class KURL;
class TQCloseEvent;
class TQDropEvent;
class TQPopupMenu;
class KGlobalAccel;
class KWinModule;
class KBackgroundManager;
class TQTimer;
class StartupId;
class KDIconView;
class Minicli;
class KActionCollection;
class KRootWidget : public TQObject
{
Q_OBJECT
public:
KRootWidget();
bool eventFilter( TQObject *, TQEvent * e );
signals:
void wheelRolled( int delta );
void colorDropEvent( TQDropEvent* e );
void imageDropEvent( TQDropEvent* e );
void newWallpaper( const KURL& url );
};
/**
* KDesktop is the toplevel widget that is the desktop.
* It handles the background, the screensaver and all the rest of the global stuff.
* The icon view is a child widget of KDesktop.
*/
class KDesktop : public TQWidget,
public KDesktopIface
{
Q_OBJECT
public:
enum WheelDirection { Forward = 0, Reverse };
KDesktop(bool x_root_hack, bool wait_for_kded );
~KDesktop();
// Implementation of the DCOP interface
virtual void rearrangeIcons();
virtual void lineupIcons();
virtual void selectAll();
virtual void unselectAll();
virtual void refreshIcons();
virtual void setShowDesktop( bool b );
virtual bool showDesktopState();
virtual void toggleShowDesktop();
virtual TQStringList selectedURLs();
virtual void configure();
virtual void popupExecuteCommand();
virtual void popupExecuteCommand(const TQString& content);
virtual void refresh();
virtual void logout();
virtual void clearCommandHistory();
virtual void runAutoStart();
virtual void switchDesktops( int delta );
virtual void desktopIconsAreaChanged(const TQRect &area, int screen);
void logout( KApplication::ShutdownConfirm confirm, KApplication::ShutdownType sdtype );
KWinModule* twinModule() const { return m_pKwinmodule; }
// The action collection of the active widget
KActionCollection *actionCollection();
// The URL (for the File/New menu)
KURL url() const;
// ## hack ##
KDIconView *iconView() const { return m_pIconView; }
private slots:
/** Background is ready. */
void backgroundInitDone();
/** Activate the desktop. */
void slotStart();
/** Activate crash recovery. */
void slotUpAndRunning();
/** Reconfigures */
void slotConfigure();
/** Show minicli,. the KDE command line interface */
void slotExecuteCommand();
/** Show taskmanager (calls KSysGuard with --showprocesses option) */
void slotShowTaskManager();
void slotShowWindowList();
void slotSwitchUser();
void slotLogout();
void slotLogoutNoCnf();
void slotHaltNoCnf();
void slotRebootNoCnf();
/** Connected to KSycoca */
void slotDatabaseChanged();
void slotShutdown();
void slotSettingsChanged(int);
void slotIconChanged(int);
/** set the vroot atom for e.g. xsnow */
void slotSetVRoot();
/** Connected to KDIconView */
void handleImageDropEvent( TQDropEvent * );
void handleColorDropEvent( TQDropEvent * );
void slotNewWallpaper(const KURL &url);
/** Connected to KDIconView and KRootWidget */
void slotSwitchDesktops(int delta);
// when there seems to be no kicker, we have to get desktopIconsArea from twinModule
void slotNoKicker();
/** Used for desktop show/hide functionality */
void slotCurrentDesktopChanged(int);
void slotWindowAdded(WId w);
void slotWindowChanged(WId w, unsigned int dirty);
protected:
void initConfig();
void initRoot();
virtual void closeEvent(TQCloseEvent *e);
virtual bool isVRoot() { return set_vroot; }
virtual void setVRoot( bool enable );
virtual bool isIconsEnabled() { return m_bDesktopEnabled; }
virtual void setIconsEnabled( bool enable );
virtual bool event ( TQEvent * e );
virtual TQPoint findPlaceForIcon( int column, int row);
virtual void addIcon(const TQString &url, int x, int y);
virtual void addIcon(const TQString &url, const TQString &dest, int x, int y);
virtual void removeIcon(const TQString &url);
private slots:
void desktopResized();
signals:
void desktopShown(bool shown);
private:
KGlobalAccel *keys;
KWinModule* m_pKwinmodule;
KBackgroundManager* bgMgr;
KDIconView *m_pIconView;
KRootWidget *m_pRootWidget;
Minicli *m_miniCli;
StartupId* startup_id;
bool set_vroot;
/** Set to true until start() has been called */
bool m_bInit;
/** Wait for kded to finish building database? */
bool m_bWaitForKded;
/** Desktop enabled / disabled **/
bool m_bDesktopEnabled;
/** Whether or not to switch desktops when mouse wheel is rolled */
bool m_bWheelSwitchesWorkspace;
TQTimer *m_waitForKicker;
/** Default mouse wheel direction (Fwd means mwheel up switches to
lower desktop)
*/
static const WheelDirection m_eDefaultWheelDirection = Forward;
/** Mouse wheel/desktop switching direction */
static WheelDirection m_eWheelDirection;
/** Possible values for "kdesktoprc"->"Mouse Buttons"->"WheelDirection" */
static const char* m_wheelDirectionStrings[2];
bool m_wmSupport;
WId m_activeWindow;
TQValueVector<WId> m_iconifiedList;
};
#endif