Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. The WindowDoesNotAcceptFocus flag is making me thirsty!!!!!!!
Forum Updated to NodeBB v4.3 + New Features

The WindowDoesNotAcceptFocus flag is making me thirsty!!!!!!!

Scheduled Pinned Locked Moved Unsolved General and Desktop
17 Posts 12 Posters 5.7k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Snotboogie
    wrote on last edited by
    #1

    I need a window with the following properties:

    1. Always on top.
    2. able to receive mouse events (movements and clicks).
    3. Does not steal keyboard focus when clicked on.
    4. Must have the above behaviors for Windows (7, 8, 10), Linux (X11), MacOS X

    I've tried many combination of flags; however, only Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus works (BUT ONLY WORK ON LINUX). The following QML will be our example. Please note that I'm using QML here for simplicity as I've also tried setting the window attributes in C++.

    Window {
        id: root
        width: 640
        height: 480
        visible: true
        flags: Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus
    }
    

    Here is an animation with the above QML running WITH EXPECTED BEHAVIORS on Linux Mint/Ubuntu. Notice the blinking cursor on line 4 did not get stolen when I click on the window's button.
    alt text

    Here is an animation with the SAME QML running on Windows 10. Notice the blinking cursor on line 4 deactivates as I click on the window's button. Also notice the whole Qt Creator window deactivates. Windows 7 and 8 also behave the same.
    alt text
    MacOS X High Sierra behaves exactly like Windows 10, so I won't make an animation.

    Can someone experienced with Qt give me some advice? Am I using the flags correctly? Did I misunderstand what these flags are supposed to do? Is there a bug that I should be reporting?

    raven-worxR 1 Reply Last reply
    0
    • S Snotboogie

      I need a window with the following properties:

      1. Always on top.
      2. able to receive mouse events (movements and clicks).
      3. Does not steal keyboard focus when clicked on.
      4. Must have the above behaviors for Windows (7, 8, 10), Linux (X11), MacOS X

      I've tried many combination of flags; however, only Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus works (BUT ONLY WORK ON LINUX). The following QML will be our example. Please note that I'm using QML here for simplicity as I've also tried setting the window attributes in C++.

      Window {
          id: root
          width: 640
          height: 480
          visible: true
          flags: Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus
      }
      

      Here is an animation with the above QML running WITH EXPECTED BEHAVIORS on Linux Mint/Ubuntu. Notice the blinking cursor on line 4 did not get stolen when I click on the window's button.
      alt text

      Here is an animation with the SAME QML running on Windows 10. Notice the blinking cursor on line 4 deactivates as I click on the window's button. Also notice the whole Qt Creator window deactivates. Windows 7 and 8 also behave the same.
      alt text
      MacOS X High Sierra behaves exactly like Windows 10, so I won't make an animation.

      Can someone experienced with Qt give me some advice? Am I using the flags correctly? Did I misunderstand what these flags are supposed to do? Is there a bug that I should be reporting?

      raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by raven-worx
      #2

      @Snotboogie
      see QTBUG-36230
      Unfortunately it's just not implemented correctly yet (at least on MS Windows)

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      1 Reply Last reply
      2
      • A Offline
        A Offline
        amonR2
        wrote on last edited by
        #3

        Lol! a pop-up message telling me that the topic is too old ahah!

        Anyway, so far the bug is getting really old, 4 years soon! Please Qt, fix it!! I face the same issue by using C++ on Windows 8 and Windows 8.1 with Qt 5.9 . What's the point to release Qt 5.10 when the previous version which is even not 1 year old can't run the basics? 0_o

        jsulmJ raven-worxR 2 Replies Last reply
        0
        • 6thC6 Offline
          6thC6 Offline
          6thC
          wrote on last edited by
          #4

          I don't mind seeing people wanting old bugs sorted and asking for attention on the forums. Being noticed is the only way to get an action.

          To bring balance to the force: One thing to highlight an old bug - another thing entirely to argue drop everything for this. I don't want that. I get new things and new things fixed every release... I don't want brakes applied to everything else because they couldn't get to this.

          Ridiculing Qt for releasing new versions while this is outstanding is a ridiculous concept itself. And you probably know it, you're passionate to see this fixed, we get it. I do advocate voicing the wish to have this looked at again - just not how.

          A 1 Reply Last reply
          0
          • A amonR2

            Lol! a pop-up message telling me that the topic is too old ahah!

            Anyway, so far the bug is getting really old, 4 years soon! Please Qt, fix it!! I face the same issue by using C++ on Windows 8 and Windows 8.1 with Qt 5.9 . What's the point to release Qt 5.10 when the previous version which is even not 1 year old can't run the basics? 0_o

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @amonR2 It will not help asking here to fix the bug - this is user forum. You should comment on the bug instead.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • A amonR2

              Lol! a pop-up message telling me that the topic is too old ahah!

              Anyway, so far the bug is getting really old, 4 years soon! Please Qt, fix it!! I face the same issue by using C++ on Windows 8 and Windows 8.1 with Qt 5.9 . What's the point to release Qt 5.10 when the previous version which is even not 1 year old can't run the basics? 0_o

              raven-worxR Offline
              raven-worxR Offline
              raven-worx
              Moderators
              wrote on last edited by
              #6

              @amonR2 said in The WindowDoesNotAcceptFocus flag is making me thirsty!!!!!!!:

              Anyway, so far the bug is getting really old, 4 years soon! Please Qt, fix it!! I face the same issue by using C++ on Windows 8 and Windows 8.1 with Qt 5.9 . What's the point to release Qt 5.10 when the previous version which is even not 1 year old can't run the basics? 0_o

              Since Qt is open source you are welcome to provide the fix.
              If you are not able to do so, i would say be thankful for what you get free of charge.

              --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
              If you have a question please use the forum so others can benefit from the solution in the future

              1 Reply Last reply
              2
              • 6thC6 6thC

                I don't mind seeing people wanting old bugs sorted and asking for attention on the forums. Being noticed is the only way to get an action.

                To bring balance to the force: One thing to highlight an old bug - another thing entirely to argue drop everything for this. I don't want that. I get new things and new things fixed every release... I don't want brakes applied to everything else because they couldn't get to this.

                Ridiculing Qt for releasing new versions while this is outstanding is a ridiculous concept itself. And you probably know it, you're passionate to see this fixed, we get it. I do advocate voicing the wish to have this looked at again - just not how.

                A Offline
                A Offline
                amonR2
                wrote on last edited by
                #7

                @6thC You call it "Ridiculing", I call it "common sense" or "relevancy". Thank you for your help and contribution.

                @raven-worx First: there's nothing free in life.
                Second: Qt is not free. Opensource and licensed products don't mean free, far from that.
                Third: I am not a Qt API developer, it's not my job.
                Don't get mad but here I have a real question for you: would you accept to be slapped for free?

                @Snotboogie Thanks a lot for the hint.

                Since a solution through Qt does not exist we have to use win32 API for Windows platforms. This function works pretty well for me (windows 8 & 8.1):

                setWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE);
                

                Regarding Linux, setAttribute(Qt::WA_X11DoNotAcceptFocus); was working fine. But only for Qt 4.8, I have not tried it on Qt 5s yet.

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  lordk
                  wrote on last edited by
                  #8

                  Hi, this bug is still not fixed in Windows 10, right? I´m coding a custom keyboard and I having trouble with the buttons stealing the focus from text inputs like word, notepad, etc.

                  Regards.

                  mrjjM 1 Reply Last reply
                  0
                  • L lordk

                    Hi, this bug is still not fixed in Windows 10, right? I´m coding a custom keyboard and I having trouble with the buttons stealing the focus from text inputs like word, notepad, etc.

                    Regards.

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    @lordk
                    Hi
                    Yes its still flagged as unresolved.

                    L 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      @lordk
                      Hi
                      Yes its still flagged as unresolved.

                      L Offline
                      L Offline
                      lordk
                      wrote on last edited by lordk
                      #10
                      This post is deleted!
                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        Mario_Moysen
                        wrote on last edited by
                        #11

                        At least for me is working very fine with PySide6 just by setting up into the MainWindow init function like so: self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus)

                        1 Reply Last reply
                        0
                        • D Offline
                          D Offline
                          deblin
                          wrote on last edited by
                          #12

                          Hi ich versuche das gleiche verhalten unter wayland zu erhalten, aber bekomme es nicht hin :(

                          from PyQt6.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
                          from PyQt6.QtCore import Qt
                          from PyQt6 import QtCore
                          class TestWidget(QWidget):
                            def __init__(self):
                                super().__init__()
                                self.setWindowFlags(Qt.WindowType.NoDropShadowWindowHint | 
                                                    Qt.WindowType.FramelessWindowHint | 
                                                    Qt.WindowType.WindowStaysOnTopHint | 
                                                    Qt.WindowType.WindowDoesNotAcceptFocus | 
                                                    Qt.WindowType.BypassWindowManagerHint)
                                self.initUI()
                          
                          
                            def initUI(self):
                                self.button = QPushButton('Button', self)
                                self.button.clicked.connect(self.on_button_click)
                                layout = QVBoxLayout()
                                layout.addWidget(self.button)
                                self.setLayout(layout)
                          
                          #        self.setAttribute(Qt.WidgetAttribute.WA_ForceDisabled, True)
                                self.show()
                          
                            def on_button_click(self):
                                print('Button clicked')
                          
                          if __name__ == '__main__':
                            app = QApplication([])
                            w = TestWidget()
                            app.exec()
                          

                          ich hab es mal versucht wie im letzten kommentar angegeben nach oben zu verschieben aber no luck :( gibt es schon eine loesung dafuer ?

                          jsulmJ JonBJ 2 Replies Last reply
                          0
                          • D deblin

                            Hi ich versuche das gleiche verhalten unter wayland zu erhalten, aber bekomme es nicht hin :(

                            from PyQt6.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
                            from PyQt6.QtCore import Qt
                            from PyQt6 import QtCore
                            class TestWidget(QWidget):
                              def __init__(self):
                                  super().__init__()
                                  self.setWindowFlags(Qt.WindowType.NoDropShadowWindowHint | 
                                                      Qt.WindowType.FramelessWindowHint | 
                                                      Qt.WindowType.WindowStaysOnTopHint | 
                                                      Qt.WindowType.WindowDoesNotAcceptFocus | 
                                                      Qt.WindowType.BypassWindowManagerHint)
                                  self.initUI()
                            
                            
                              def initUI(self):
                                  self.button = QPushButton('Button', self)
                                  self.button.clicked.connect(self.on_button_click)
                                  layout = QVBoxLayout()
                                  layout.addWidget(self.button)
                                  self.setLayout(layout)
                            
                            #        self.setAttribute(Qt.WidgetAttribute.WA_ForceDisabled, True)
                                  self.show()
                            
                              def on_button_click(self):
                                  print('Button clicked')
                            
                            if __name__ == '__main__':
                              app = QApplication([])
                              w = TestWidget()
                              app.exec()
                            

                            ich hab es mal versucht wie im letzten kommentar angegeben nach oben zu verschieben aber no luck :( gibt es schon eine loesung dafuer ?

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #13

                            @deblin Hi! Es gibt Forum in Deutscher Sprache hier: https://forum.qt.io/category/28/german

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            0
                            • D deblin

                              Hi ich versuche das gleiche verhalten unter wayland zu erhalten, aber bekomme es nicht hin :(

                              from PyQt6.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
                              from PyQt6.QtCore import Qt
                              from PyQt6 import QtCore
                              class TestWidget(QWidget):
                                def __init__(self):
                                    super().__init__()
                                    self.setWindowFlags(Qt.WindowType.NoDropShadowWindowHint | 
                                                        Qt.WindowType.FramelessWindowHint | 
                                                        Qt.WindowType.WindowStaysOnTopHint | 
                                                        Qt.WindowType.WindowDoesNotAcceptFocus | 
                                                        Qt.WindowType.BypassWindowManagerHint)
                                    self.initUI()
                              
                              
                                def initUI(self):
                                    self.button = QPushButton('Button', self)
                                    self.button.clicked.connect(self.on_button_click)
                                    layout = QVBoxLayout()
                                    layout.addWidget(self.button)
                                    self.setLayout(layout)
                              
                              #        self.setAttribute(Qt.WidgetAttribute.WA_ForceDisabled, True)
                                    self.show()
                              
                                def on_button_click(self):
                                    print('Button clicked')
                              
                              if __name__ == '__main__':
                                app = QApplication([])
                                w = TestWidget()
                                app.exec()
                              

                              ich hab es mal versucht wie im letzten kommentar angegeben nach oben zu verschieben aber no luck :( gibt es schon eine loesung dafuer ?

                              JonBJ Offline
                              JonBJ Offline
                              JonB
                              wrote on last edited by
                              #14

                              @deblin said in The WindowDoesNotAcceptFocus flag is making me thirsty!!!!!!!:

                              unter wayland zu erhalten

                              There are several features of a windowing system that Wayland does not allow/support. For example, you cannot move a window to a particular position. Maybe it does not accept this flag? If it works under Xorg but not under Wayland this is probably the case?

                              1 Reply Last reply
                              0
                              • D Offline
                                D Offline
                                deblin
                                wrote on last edited by
                                #15

                                Oh I am sorry the hole website is in german and i forgot about it xD

                                To be a little more precise it is wayland gnome with kompositor mutter.

                                i tried it now in native language

                                #include <QApplication>
                                #include <QPushButton>
                                #include <QWidget>
                                
                                int main(int argc, char **argv) {
                                    QApplication app(argc, argv);
                                
                                    QWidget window;
                                    window.setWindowFlags(Qt::WindowDoesNotAcceptFocus);
                                
                                    QPushButton button("Click me!", &window);
                                    QObject::connect(&button, &QPushButton::clicked, [&]() {
                                        button.setText("You clicked me!");
                                    });
                                
                                    window.show();
                                    return app.exec();
                                }
                                but onclick it gets focus :( I wrote a virtuel keyboard that runs fine under x11 but wayland always gives it a focus, therefore i cant use it ....
                                
                                1 Reply Last reply
                                0
                                • D Offline
                                  D Offline
                                  deblin
                                  wrote on last edited by
                                  #16

                                  i didnt find a soloution only a work-around :(

                                  created a gnomeshell plugin to bounce back focus

                                  {
                                      "shell-version": ["43.6"],
                                      "uuid": "myextension@example.com",
                                      "name": "My Extension",
                                      "description": "Example Gnome Shell Extension"
                                  }
                                  
                                  const Main = imports.ui.main;
                                  const Shell = imports.gi.Shell;
                                  
                                  let focusChangedId;
                                  let previousWindow;
                                  
                                  function enable() {
                                      focusChangedId = global.display.connect('notify::focus-window', () => {
                                          const focusedWindow = global.display.focus_window;
                                          if (focusedWindow) {
                                              // Prüfen Sie, ob das fokussierte Fenster das ist, das Sie ignorieren möchten
                                              if (focusedWindow.get_title() === 'ignorier') {
                                                  // Wenn das der Fall ist, setzen Sie den Fokus zurück auf das vorherige Fenster
                                                  if (previousWindow) {
                                                      Main.activateWindow(previousWindow);
                                                  }
                                              } else {
                                                  // Wenn das nicht der Fall ist, aktualisieren Sie das vorherige Fenster
                                                  previousWindow = focusedWindow;
                                              }
                                          }
                                      });
                                  }
                                  
                                  function disable() {
                                      if (focusChangedId) {
                                          global.display.disconnect(focusChangedId);
                                          focusChangedId = null;
                                          previousWindow = null;
                                      }
                                  }
                                  
                                  
                                  

                                  and switched it on with the python prog

                                  import subprocess
                                  
                                  def enable_extension(extension_id):
                                      subprocess.run(['gnome-extensions', 'enable', extension_id])
                                  
                                  def disable_extension(extension_id):
                                      subprocess.run(['gnome-extensions', 'disable', extension_id])
                                  
                                  

                                  but this creates other issues :( so I am back too X11 good luck to the next one! 2017 was the first post to this is. I try it in another 5 years ....

                                  1 Reply Last reply
                                  0
                                  • Y Offline
                                    Y Offline
                                    Yoho
                                    wrote on last edited by
                                    #17

                                    I've encountered a similar problem. In my case, the widget continually activates and gains focus while being resized. I've set the following properties for the widget:

                                    setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
                                    setAttribute(Qt::WA_ShowWithoutActivating);
                                    

                                    This issue seems to occur only on Windows, and it doesn't happen before we upgrade to 5.15; I haven't experienced it on MacOS. My solution was to add Qt::BypassWindowManagerHint to the widget, and the widget won't get activated and focused anymore.

                                    1 Reply Last reply
                                    0

                                    • Login

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • Users
                                    • Groups
                                    • Search
                                    • Get Qt Extensions
                                    • Unsolved