[kde-doc-english] [konsole] /: Restore --background-mode

Kurt Hindenburg kurt.hindenburg at gmail.com
Tue Feb 4 13:40:42 UTC 2014


Git commit cfbfb0fd8c11d16ccda0859b7c2edaac411caafb by Kurt Hindenburg.
Committed on 04/02/2014 at 13:35.
Pushed by hindenburg into branch 'master'.

Restore --background-mode

For now restore this option that was removed for 2.11.  This option
is somewhat a hack and abnormal feature.  However, it seems a number
of people use it and I can see how it would be useful.  So instead of
spending a lot of time right now trying to correct the issues, just
restore the previous code.
Ideally for KDE 5, this portion of the code can be better handled.

35bb9cf9e79465d252580615f50b4ce8d34e3d34

BUG: 320783
FIXED-IN: 2.13#

M  +6    -0    doc/manual/index.docbook
M  +56   -16   src/Application.cpp
M  +5    -0    src/Application.h
M  +3    -0    src/main.cpp

http://commits.kde.org/konsole/cfbfb0fd8c11d16ccda0859b7c2edaac411caafb

diff --git a/doc/manual/index.docbook b/doc/manual/index.docbook
index 3509ef3..7a09e86 100644
--- a/doc/manual/index.docbook
+++ b/doc/manual/index.docbook
@@ -1041,6 +1041,12 @@ For more information, please visit
 </varlistentry>
 
 <varlistentry>
+<term><option>--background-mode</option></term>
+<listitem><para><action>Start &konsole;</action> in the background and bring to the front when <keycombo action="simul">&Ctrl;&Shift;<keycap>F12</keycap></keycombo> (by default) is pressed.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
 <term><option>--new-tab</option></term>
 <listitem><para><action>Create a new tab</action> in an existing window rather than creating a new window.
 </para></listitem>
diff --git a/src/Application.cpp b/src/Application.cpp
index a1a6838..efd43ae 100644
--- a/src/Application.cpp
+++ b/src/Application.cpp
@@ -46,6 +46,8 @@ Application::Application() : KUniqueApplication()
 
 void Application::init()
 {
+    _backgroundInstance = 0;
+
 #if defined(Q_WS_MAC)
     // this ensures that Ctrl and Meta are not swapped, so CTRL-C and friends
     // will work correctly in the terminal
@@ -125,22 +127,28 @@ int Application::newInstance()
             }
         }
 
-        // Qt constrains top-level windows which have not been manually
-        // resized (via QWidget::resize()) to a maximum of 2/3rds of the
-        //  screen size.
-        //
-        // This means that the terminal display might not get the width/
-        // height it asks for.  To work around this, the widget must be
-        // manually resized to its sizeHint().
-        //
-        // This problem only affects the first time the application is run.
-        // run. After that KMainWindow will have manually resized the
-        // window to its saved size at this point (so the Qt::WA_Resized
-        // attribute will be set)
-        if (!window->testAttribute(Qt::WA_Resized))
-            window->resize(window->sizeHint());
-
-        window->show();
+        // if the background-mode argument is supplied, start the background
+        // session ( or bring to the front if it already exists )
+        if (args->isSet("background-mode")) {
+            startBackgroundMode(window);
+        } else {
+            // Qt constrains top-level windows which have not been manually
+            // resized (via QWidget::resize()) to a maximum of 2/3rds of the
+            //  screen size.
+            //
+            // This means that the terminal display might not get the width/
+            // height it asks for.  To work around this, the widget must be
+            // manually resized to its sizeHint().
+            //
+            // This problem only affects the first time the application is run.
+            // run. After that KMainWindow will have manually resized the
+            // window to its saved size at this point (so the Qt::WA_Resized
+            // attribute will be set)
+            if (!window->testAttribute(Qt::WA_Resized))
+                window->resize(window->sizeHint());
+
+            window->show();
+        }
     }
 
     firstInstance = false;
@@ -425,5 +433,37 @@ Profile::Ptr Application::processProfileChangeArgs(KCmdLineArgs* args, Profile::
     }
 }
 
+void Application::startBackgroundMode(MainWindow* window)
+{
+    if (_backgroundInstance) {
+        return;
+    }
+
+    KAction* action = window->actionCollection()->addAction("toggle-background-window");
+    action->setObjectName(QLatin1String("Konsole Background Mode"));
+    action->setText(i18n("Toggle Background Window"));
+    action->setGlobalShortcut(KShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_F12)));
+
+    connect(action, SIGNAL(triggered()),
+            this, SLOT(toggleBackgroundInstance()));
+
+    _backgroundInstance = window;
+}
+
+void Application::toggleBackgroundInstance()
+{
+    Q_ASSERT(_backgroundInstance);
+
+    if (!_backgroundInstance->isVisible()) {
+        _backgroundInstance->show();
+        // ensure that the active terminal display has the focus. Without
+        // this, an odd problem occurred where the focus widget would change
+        // each time the background instance was shown
+        _backgroundInstance->setFocus();
+    } else {
+        _backgroundInstance->hide();
+    }
+}
+
 #include "Application.moc"
 
diff --git a/src/Application.h b/src/Application.h
index c1d37b4..ae9b1fe 100644
--- a/src/Application.h
+++ b/src/Application.h
@@ -69,10 +69,13 @@ private slots:
     void createWindow(Profile::Ptr profile , const QString& directory);
     void detachView(Session* session);
 
+    void toggleBackgroundInstance();
+
 private:
     void init();
     void listAvailableProfiles();
     void listProfilePropertyInfo();
+    void startBackgroundMode(MainWindow* window);
     bool processHelpArgs(KCmdLineArgs* args);
     MainWindow* processWindowArgs(KCmdLineArgs* args);
     Profile::Ptr processProfileSelectArgs(KCmdLineArgs* args);
@@ -80,6 +83,8 @@ private:
     void processTabsFromFileArgs(KCmdLineArgs* args, MainWindow* window);
     void createTabFromArgs(KCmdLineArgs* args, MainWindow* window,
                            const QHash<QString, QString>&);
+
+    MainWindow* _backgroundInstance;
 };
 }
 #endif  // APPLICATION_H
diff --git a/src/main.cpp b/src/main.cpp
index 7544a81..9674e71 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -170,6 +170,9 @@ void fillCommandLineOptions(KCmdLineOptions& options)
     options.add("tabs-from-file <file>",
                 ki18nc("@info:shell", "Create tabs as specified in given tabs configuration"
                       " file"));
+    options.add("background-mode",
+                ki18nc("@info:shell", "Start Konsole in the background and bring to the front"
+                      " when Ctrl+Shift+F12 (by default) is pressed"));
     options.add("show-menubar", ki18nc("@info:shell", "Show the menubar, overriding the default setting"));
     options.add("hide-menubar", ki18nc("@info:shell", "Hide the menubar, overriding the default setting"));
     options.add("show-tabbar", ki18nc("@info:shell", "Show the tabbar, overriding the default setting"));


More information about the kde-doc-english mailing list