ui: Add a floating-window window-contol for opening floating windows in a tiling window manager on gtk. Use this style on the help browser, inspector, and deploy windows. Please report any other windows that need this flag since I don't regularly use a tiling window manager. Tested on Ubuntu 14.04 64bit with i3 window manager. Fixes #1026.
							parent
							
								
									80be72b6e1
								
							
						
					
					
						commit
						57cdc841c3
					
				| 
						 | 
				
			
			@ -361,6 +361,7 @@ CONSTANT: window-controls>decor-flags
 | 
			
		|||
        { small-title-bar $ GDK_DECOR_TITLE }
 | 
			
		||||
        { normal-title-bar $ GDK_DECOR_TITLE }
 | 
			
		||||
        { textured-background 0 }
 | 
			
		||||
        { floating-window 0 }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
CONSTANT: window-controls>func-flags
 | 
			
		||||
| 
						 | 
				
			
			@ -372,13 +373,19 @@ CONSTANT: window-controls>func-flags
 | 
			
		|||
        { small-title-bar 0 }
 | 
			
		||||
        { normal-title-bar 0 }
 | 
			
		||||
        { textured-background 0 }
 | 
			
		||||
        { floating-window 0 }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
: set-window-hint ( win controls -- )
 | 
			
		||||
    {
 | 
			
		||||
        { [ floating-window over member-eq? ] [ drop GDK_WINDOW_TYPE_HINT_DIALOG ] }
 | 
			
		||||
        { [ small-title-bar over member-eq? ] [ drop GDK_WINDOW_TYPE_HINT_UTILITY ] }
 | 
			
		||||
        [ drop GDK_WINDOW_TYPE_HINT_NORMAL ]
 | 
			
		||||
    } cond gtk_window_set_type_hint ;
 | 
			
		||||
 | 
			
		||||
: configure-window-controls ( win controls -- )
 | 
			
		||||
    [
 | 
			
		||||
        small-title-bar swap member-eq?
 | 
			
		||||
        GDK_WINDOW_TYPE_HINT_UTILITY GDK_WINDOW_TYPE_HINT_NORMAL ?
 | 
			
		||||
        gtk_window_set_type_hint
 | 
			
		||||
        set-window-hint
 | 
			
		||||
    ] [
 | 
			
		||||
        [ gtk_widget_get_window ] dip
 | 
			
		||||
        window-controls>decor-flags symbols>flags
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,8 @@ SYMBOLS:
 | 
			
		|||
    resize-handles
 | 
			
		||||
    small-title-bar
 | 
			
		||||
    normal-title-bar
 | 
			
		||||
    textured-background ;
 | 
			
		||||
    textured-background
 | 
			
		||||
    floating-window ;
 | 
			
		||||
 | 
			
		||||
CONSTANT: default-world-pixel-format-attributes
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ ui.gadgets.borders ui.gadgets.buttons ui.gadgets.editors
 | 
			
		|||
ui.gadgets.glass ui.gadgets.labels ui.gadgets.panes
 | 
			
		||||
ui.gadgets.scrollers ui.gadgets.status-bar ui.gadgets.tracks
 | 
			
		||||
ui.gadgets.viewports ui.gestures ui.tools.browser.history
 | 
			
		||||
ui.tools.browser.popups ui.tools.common vocabs ;
 | 
			
		||||
ui.tools.browser.popups ui.tools.common vocabs ui.gadgets.worlds ;
 | 
			
		||||
IN: ui.tools.browser
 | 
			
		||||
 | 
			
		||||
TUPLE: browser-gadget < tool history scroller search-field popup ;
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +89,11 @@ M: browser-gadget definitions-changed ( set browser -- )
 | 
			
		|||
M: browser-gadget focusable-child* search-field>> ;
 | 
			
		||||
 | 
			
		||||
: (browser-window) ( topic -- )
 | 
			
		||||
    <browser-gadget> "Browser" open-status-window ;
 | 
			
		||||
    <browser-gadget>
 | 
			
		||||
    <world-attributes>
 | 
			
		||||
        "Browser" >>title
 | 
			
		||||
        { floating-window } >>window-controls
 | 
			
		||||
    open-status-window ;
 | 
			
		||||
 | 
			
		||||
: browser-window ( -- )
 | 
			
		||||
    "help.home" (browser-window) ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,8 @@ tools.deploy.config.editor tools.deploy vocabs namespaces
 | 
			
		|||
models.mapping sequences system accessors fry ui.gadgets ui.render
 | 
			
		||||
ui.gadgets.buttons ui.gadgets.packs ui.gadgets.labels
 | 
			
		||||
ui.gadgets.editors ui.gadgets.borders ui.gestures ui.commands assocs
 | 
			
		||||
ui.gadgets.tracks ui ui.tools.listener ui.tools.browser ;
 | 
			
		||||
ui.gadgets.tracks ui ui.tools.listener ui.tools.browser
 | 
			
		||||
ui.gadgets.worlds ;
 | 
			
		||||
IN: ui.tools.deploy
 | 
			
		||||
 | 
			
		||||
TUPLE: deploy-gadget < pack vocab settings ;
 | 
			
		||||
| 
						 | 
				
			
			@ -111,5 +112,9 @@ deploy-gadget "toolbar" f {
 | 
			
		|||
: deploy-tool ( vocab -- )
 | 
			
		||||
    vocab-name
 | 
			
		||||
    [ <deploy-gadget> { 10 10 } <border> ]
 | 
			
		||||
    [ "Deploying “" "”" surround ] bi
 | 
			
		||||
    [
 | 
			
		||||
        <world-attributes>
 | 
			
		||||
            swap "Deploying “" "”" surround >>title
 | 
			
		||||
            { floating-window } >>window-controls
 | 
			
		||||
    ] bi
 | 
			
		||||
    open-window ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@ classes io io.styles arrays hashtables math.order sorting refs fonts
 | 
			
		|||
ui.tools.browser ui.commands ui.operations ui.gadgets ui.gadgets.panes
 | 
			
		||||
ui.gadgets.scrollers ui.gadgets.slots ui.gadgets.tracks ui.gestures
 | 
			
		||||
ui.gadgets.buttons ui.gadgets.tables ui.gadgets.status-bar
 | 
			
		||||
ui.gadgets.labeled ui.tools.common ui combinators ;
 | 
			
		||||
ui.gadgets.labeled ui.tools.common ui combinators ui.gadgets.worlds ;
 | 
			
		||||
IN: ui.tools.inspector
 | 
			
		||||
 | 
			
		||||
TUPLE: inspector-gadget < tool table ;
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,12 @@ M: inspector-gadget focusable-child*
 | 
			
		|||
\ com-push H{ { +listener+ t } } define-command
 | 
			
		||||
 | 
			
		||||
: slot-editor-window ( close-hook update-hook assoc key key-string -- )
 | 
			
		||||
    [ <value-ref> <slot-editor> ] [ "Slot editor: " prepend ] bi*
 | 
			
		||||
    [ <value-ref> <slot-editor> ]
 | 
			
		||||
    [
 | 
			
		||||
        <world-attributes>
 | 
			
		||||
            swap "Slot editor: " prepend >>title
 | 
			
		||||
            { floating-window } >>window-controls
 | 
			
		||||
    ] bi*
 | 
			
		||||
    open-status-window ;
 | 
			
		||||
 | 
			
		||||
: com-edit-slot ( inspector -- )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -333,6 +333,9 @@ HELP: normal-title-bar
 | 
			
		|||
HELP: textured-background
 | 
			
		||||
{ $description "Asks for a window to have a background that blends seamlessly with the window frame. Factor will leave the window background transparent and pass mouse button gestures not handled directly by a gadget through to the window system so that the window can be dragged from anywhere on its background." } ;
 | 
			
		||||
 | 
			
		||||
HELP: floating-window
 | 
			
		||||
{ $description "Provides a hint to the window manager to create a floating, dialog-style window. Currently, this is only implemented for the GTK backend." } ;
 | 
			
		||||
 | 
			
		||||
HELP: MAIN-WINDOW:
 | 
			
		||||
{ $syntax "MAIN-WINDOW: window-word { attributes }
 | 
			
		||||
    attribute-code ;" }
 | 
			
		||||
| 
						 | 
				
			
			@ -357,5 +360,6 @@ ARTICLE: "ui.gadgets.worlds-window-controls" "Window controls"
 | 
			
		|||
    small-title-bar
 | 
			
		||||
    normal-title-bar
 | 
			
		||||
    textured-background
 | 
			
		||||
    floating-window
 | 
			
		||||
}
 | 
			
		||||
"Provide a sequence of these values in the " { $snippet "window-controls" } " slot of the " { $link world-attributes } " tuple you pass to " { $link open-window } "." ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue