Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^2: Upgrade Gtk2 to Gtk3, and Gnome2::Wnck breaks

by Anonymous Monk
on Dec 30, 2018 at 09:25 UTC ( [id://1227818]=note: print w/replies, xml ) Need Help??


in reply to Re: Upgrade Gtk2 to Gtk3, and Gnome2::Wnck breaks
in thread Upgrade Gtk2 to Gtk3, and Gnome2::Wnck breaks

>Hi, what exactly are you trying to do with Gnome2::Wnck ?

Window tiling on multiple workspaces. Firstly, I use WNCK get a list of workspaces and their sizes. Then I create a test Gtk2::Window, size 100x100. Then I use WNCK to get the actual size of the window. This gives me the size of window controls.

Then I draw a test window in the top left/bottom right corners of the window. Then I use WNCK to get the actual size/position of the window. This gives me the size and position of taskbars/panels, which gives me the size of the available workspace.

Specifically, these are the operations I use. I have never found any alternative to WNCK, and of course finding something that works on MS Windows as well as Linux is just a foolish pipe dream :)

Get the default screen and workspace

$screen = Gnome2::Wnck::Screen->get_default() $screen->force_update(); $workspace = $screen->get_active_workspace();

Get remaining workspaces

do { $otherWorkspace = $workspace->get_neighbor('WNCK_MOTION_RIGHT'); until (! $otherWorkspace);

Get the size of a workspace

$workspace->get_width(); $workspace->get_height();

Move a window to a workspace

$wnckWin->move_to_workspace($workspace);

Get a window's current screen

$screen = $wnckWin->get_screen();

Get the system name/number for a workspace

$num = $workspace->get_number(); $name = $workspace->get_name();

Get/set the size and position of the window

$wnckWin->get_client_window_geometry(); $wnckWin->set_geometry( 'WNCK_WINDOW_GRAVITY_CURRENT', [ 'WNCK_WINDOW_CHANGE_X', 'WNCK_WINDOW_CHANGE_Y', 'WNCK_WINDOW_CHANGE_WIDTH', 'WNCK_WINDOW_CHANGE_HEIGHT', ], $x, $y, $width, $height, );

Minimise/unminimise windows

$wnckWin->unminimize(time()); $wnckWin->minimize(); if (wnckWin->is_minimized) { ... }

Given a WNCK window, find the equivalent Gtk2 window

foreach my $gtkWin (Gtk2::Window->list_toplevels()) { $wnckWinXid = $wnckWin->get_xid(); $gtkWinXid = $gtkWin->get_xid(); if ($wnckWinXid eq $gtkWinXid) { ... } }

Given a Gtk window, find the equivalent WNCK window

$gdkWin = $gtkWin->get_window(); $winXid = $gdkWin->get_xid(); $wnckScreen->force_update(); foreach my $wnckWin ($wnckScreen->get_windows()) { my $wnckWinXid = $wnckWin->get_xid(); if ($wnckWinXid && $wnckWinXid eq $winXid) { ... }

Find the WNCK window for "Notepad" or "Firefox", or whatever

$wnckScreen->force_update(); foreach my $wnckWin ($wnckScreen->get_windows()) { if ($wnckWin->get_name() eq 'Notepad') { ... } }

Replies are listed 'Best First'.
Re^3: Upgrade Gtk2 to Gtk3, and Gnome2::Wnck breaks
by zentara (Archbishop) on Dec 30, 2018 at 14:38 UTC
    Hi, X11::WMCtrl will do many of your tasks, or use the wmctrl directly. You may also want to dig into Gtk3's capabilities. Search google for "gtk3 get active window" and you will find the code.

    I'm not really a human, but I play one on earth. ..... an animated JAPH

      That looks perfect.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1227818]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (9)
As of 2024-03-28 12:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found