kdelibs/kdeui/kernel/kapplication.h
Ivailo Monev a8080b7dde kdeui: setup the session config instance for saving
comes with a warning, session management is tricky but it works like a
charm now

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2024-05-10 06:23:55 +03:00

306 lines
9.3 KiB
C++

/* This file is part of the KDE libraries
Copyright (C) 1997 Matthias Kalle Dalheimer (kalle@kde.org)
Copyright (c) 1998, 1999 KDE Team
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 KAPP_H
#define KAPP_H
#include <kdeui_export.h>
class KConfig;
#include <QtGui/QApplication>
#include <kcomponentdata.h>
#include <kglobal.h>
#ifdef Q_WS_X11
#include <QtGui/qx11info_x11.h>
#endif
#define kapp KApplication::kApplication()
#define KAPPLICATION_GUI_TYPE KApplication::Gui
class KApplicationPrivate;
/**
* Controls and provides information to all KDE applications.
*
* Only one object of this class can be instantiated in a single app.
* This instance is always accessible via the 'kapp' global variable.
*
* This class provides the following services to all KDE applications.
*
* @li It controls the event queue (see QApplication ).
* @li It provides the application with KDE resources such as
* accelerators, common menu entries, a KConfig object. session
* management events, help invocation etc.
* @li Installs an empty signal handler for the SIGPIPE signal.
* If you want to catch this signal
* yourself, you have set a new signal handler after KApplication's
* constructor has run.
* @li It can start new services
*
*
* @short Controls and provides information to all KDE applications.
* @author Matthias Kalle Dalheimer <kalle@kde.org>
*/
class KDEUI_EXPORT KApplication : public QApplication
{
Q_OBJECT
public:
/**
* This constructor is the one you should use.
* It takes aboutData and command line arguments from KCmdLineArgs.
*
* Note that for a non-GUI daemon, you might want to use QCoreApplication
* and a KComponentData instance instead. You'll save an unnecessary dependency
* to kdeui. The main difference is that you will have to do a number of things yourself:
* <ul>
* <li>Register to DBus, if necessary.</li>
* <li>Call KGlobal::locale(), if using multiple threads.</li>
* </ul>
*/
explicit KApplication();
#ifdef Q_WS_X11
/**
* Constructor. Parses command-line arguments. Use this constructor when you
* you need to use a non-default visual or colormap.
*
* @param display Will be passed to Qt as the X display. The display must be
* valid and already opened.
*
* @param visual A pointer to the X11 visual that should be used by the
* application. Note that only TrueColor visuals are supported on depths
* greater than 8 bpp. If this parameter is NULL, the default visual will
* be used instead.
*
* @param colormap The colormap that should be used by the application. If
* this parameter is 0, the default colormap will be used instead.
*/
explicit KApplication(Display *display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0);
/**
* Constructor. Parses command-line arguments. Use this constructor to use KApplication
* in a Motif or Xt program.
*
* @param display Will be passed to Qt as the X display. The display must be valid and already
* opened.
*
* @param argc command line argument count
*
* @param argv command line argument value(s)
*
* @param rAppName application name. Will be used for finding the
* associated message files and icon files, and as the default
* registration name for DCOP. This is a mandatory parameter.
*/
explicit KApplication(Display *display, int& argc, char** argv, const QByteArray& rAppName);
#endif
virtual ~KApplication();
/**
* Returns the current application object.
*
* This is similar to the global QApplication pointer qApp. It
* allows access to the single global KApplication object, since
* more than one cannot be created in the same application. It
* saves you the trouble of having to pass the pointer explicitly
* to every function that may require it.
* @return the current application object
*/
static KApplication* kApplication();
/**
* Returns the application session config object.
*
* @return A pointer to the application's instance specific
* KConfig object.
* @see KConfig
*/
KConfig* sessionConfig();
/**
* Disables session management for this application.
*
* Useful in case your application is started by the
* initial "startkde" script.
*/
void disableSessionManagement();
/**
* Enables session management for this application, formerly
* disabled by calling disableSessionManagement(). You usually
* shouldn't call this function, as session management is enabled
* by default.
*/
void enableSessionManagement();
/**
* Returns true if the application is currently saving its session
* data (most probably before KDE logout). This is intended for use
* mainly in KMainWindow::queryClose().
*
* @see KMainWindow::queryClose
*/
bool sessionSaving() const;
/**
* Returns true if the application is currently restoring its session
*
* @see KMainWindow::queryClose
*/
bool isSessionRestored() const;
/**
* Sets the top widget of the application.
* This means basically applying the right window caption.
* An application may have several top widgets. You don't
* need to call this function manually when using KMainWindow.
*
* @param topWidget A top widget of the application.
*
* @see icon(), caption()
**/
void setTopWidget( QWidget *topWidget );
/**
* Installs widget filter as global X11 event filter.
*
* The widget
* filter receives XEvents in its standard QWidget::x11Event() function.
*
* Warning: Only do this when absolutely necessary. An installed X11 filter
* can slow things down.
**/
void installX11EventFilter( QWidget* filter );
/**
* Removes global X11 event filter previously installed by
* installX11EventFilter().
*/
void removeX11EventFilter( const QWidget* filter );
/**
* Returns the app startup notification identifier for this running
* application.
* @return the startup notification identifier
*/
QByteArray startupId() const;
/**
* @internal
* Sets a new value for the application startup notification window property for newly
* created toplevel windows.
* @param startup_id the startup notification identifier
* @see KStartupInfo::setNewStartupId
*/
void setStartupId( const QByteArray& startup_id );
/**
* @internal
* Used only by KStartupId.
*/
void clearStartupId();
/**
* Returns the last user action timestamp or 0 if no user activity has taken place yet.
* @see updateuserTimestamp
*/
unsigned long userTimestamp() const;
/**
* Setups signal handler for SIGTERM, SIGHUP and SIGINT to call QApplication::quit() when such
* signal is received.
* @note By default KApplication constructor calls this static method, unless QCoreApplication
* or QApplication instance is used you should not call it.
*/
static void quitOnSignal();
/**
* Connects D-Bus disconnected signal to QApplication::quit().
* @note By default KApplication constructor calls this static method, unless QCoreApplication
* or QApplication instance is used you should not call it.
* @since 4.23
*/
static void quitOnDisconnected();
#ifdef Q_WS_X11
/**
@internal
*/
bool notify( QObject* receiver, QEvent* event );
#endif // Q_WS_X11
public Q_SLOTS:
/**
* Updates the last user action timestamp to the given time, or to the current time, if 0 is
* given. Do not use unless you're really sure what you're doing. Consult focus stealing
* prevention section in kdebase/kwin/README.
*/
void updateUserTimestamp(int time = 0);
/**
* Saves the state of the application for the current session, the state may be restored on the
* next login
*
* @warning when reimplementing call this method first! also sessionSaving() will not return true
* outside the scope of the implementation
*/
virtual bool saveSession();
void reparseConfiguration();
void quit();
protected:
/**
* @internal Used by KUniqueApplication
*/
KApplication(const KComponentData &cData);
#ifdef Q_WS_X11
/**
* @internal Used by KUniqueApplication
*/
KApplication(Display *display, Qt::HANDLE visual, Qt::HANDLE colormap, const KComponentData &cData);
/**
* Used to catch X11 events
*/
bool x11EventFilter( XEvent * );
#endif
/// Current application object.
static KApplication *KApp;
private:
KApplication(const KApplication&);
KApplication& operator=(const KApplication&);
friend class KApplicationPrivate;
friend void kAppCreateTray();
friend void kAppDestroyTray();
KApplicationPrivate* const d;
Q_PRIVATE_SLOT(d, void _k_x11FilterDestroyed())
Q_PRIVATE_SLOT(d, void _k_checkAppStartedSlot())
Q_PRIVATE_SLOT(d, void _k_aboutToQuitSlot())
};
#endif