The i3 FAQ has migrated to https://github.com/i3/i3/discussions. All content here is read-only.
Ask Your Question
0

<Eclipse, some another app>'s splashscreen / toolbar / dialog does not display in floating mode. How to fix?

asked 2013-07-12 02:28:33 +0000

ack006 gravatar image

updated 2013-07-12 13:14:34 +0000

When starting an application in i3, a splashscreen, toolbar, dialog looks odd because it isn't displayed in floating mode. How to fix?

edit retag flag offensive close merge delete

4 answers

Sort by » oldest newest most voted
3

answered 2013-07-12 05:55:47 +0000

joepd gravatar image

updated 2013-07-31 23:51:05 +0000

To be more precise what one should report/fix, the misbehaving application is directly requesting to get a specific size. i3 (and any tiling window manager) will normally ignore this request, as this only makes sense in a floating window manager environment.

To convince i3 that a window needs to be floating (except for the workaround of some regular expression on the window title or window class), the window tells the window manager that it is a special kind of window. This is done with the Freedesktop standard Extended Window Manager Hints. i3 currently honors the following requests to for being treated as floating windows:

_NET_WM_WINDOW_TYPE_DIALOG
_NET_WM_WINDOW_TYPE_UTILITY
_NET_WM_WINDOW_TYPE_TOOLBAR
_NET_WM_WINDOW_TYPE_SPLASH

Edited to add: With this commit, a new window manager hint is honored.

Handle the _NET_REQUEST_FRAME_EXTENTS ClientMessage (java compat)

This ClientMessage can be used to estimate how big the window will be before opening it. Java always sends the ClientMessage and checks the atom that should be set by the window manager, but it seems that the fallback code path has a race condition.

Let’s see if the situation gets better with this change. I have been running this patch for about two weeks and have not seen any issues with it.

edit flag offensive delete link more

Comments

Thanks *a lot* for this very helpful explanation! Let's go bug hunting ;-)

ack006 gravatar imageack006 ( 2013-07-12 12:56:11 +0000 )edit

Do you mind if I change the question to be more generic (so that others can quickly find your answer)? This way people can report bugs more precisely, without need for workarounds or WM switch just because their bread'n'butter application has a misbehaving toolbar or dialog :-)

ack006 gravatar imageack006 ( 2013-07-12 13:07:19 +0000 )edit

Do as you wish :)

joepd gravatar imagejoepd ( 2013-07-12 14:55:13 +0000 )edit

It is the correct thing, but still the annoying problem will be there... just use the for_window in the i3 config and move on... unless you have the patience to report this bug to every package you see with this problem (personally, my for_window is already quite big)

bruno.braga gravatar imagebruno.braga ( 2013-07-31 23:55:58 +0000 )edit
2

answered 2013-08-01 00:46:19 +0000

cee gravatar image

I am currently developing a Qt application and was searching for how to make it floating in i3.

The Qt way:
this->setWindowFlags(Qt::Dialog);

Some of the other flags I tried had the same effect...
More info: official Qt doc

edit flag offensive delete link more
1

answered 2013-07-12 02:30:50 +0000

ack006 gravatar image

updated 2013-07-12 14:03:33 +0000

By getting the developers to fix their bug! ;-) The application should set the correct hints for the window so that window managers can do the right thing.

For a quick workaround (don't forget to report a bug upstream!), use xprop or the output of the script in this answer to make a list of criteria matching the offending window, then add the following directive to ${HOME}/.i3.config :

for_window [<list of criteria>] floating enable

A list of known temporary workarounds:

# Eclipse splashscreen
for_window [class="Eclipse" title="^Eclipse( SDK )?$"] floating enable

# Orca screen reader "flat review" tool (also disable border so it doesn't cover the item being reviewed)
for_window [class="Orca" title="orca"] floating enable border none
edit flag offensive delete link more
0

answered 2014-08-17 12:32:48 +0000

In Java, one way to request a Window to be floating is to use:

Window.setType(Window.Type.POPUP);

This works with i3 (tested with version 4.7). Interestingly Window.Type.UTILITY does not give a floating window.

Note that this requires Java 1.7. Anybody knows if there are other ways?

Complete example code:

public class Splash {
    public static void main(String[] args) throws InterruptedException {
        javax.swing.JFrame frame = new javax.swing.JFrame();

        // This hints the Window Manager to display the window as floating
        frame.setType(java.awt.Window.Type.POPUP);

        frame.setPreferredSize(new java.awt.Dimension(300, 200));

        // Add some content
        frame.add(new javax.swing.JLabel("Window type: " + frame.getType(), javax.swing.JLabel.CENTER));

        frame.pack();

        // Center the window
        frame.setLocationRelativeTo(null);

        // Show the window
        frame.setVisible(true);

        Thread.sleep(2000);
        System.exit(0);
    }
}
edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2013-07-12 02:28:33 +0000

Seen: 2,007 times

Last updated: Aug 17 '14