Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

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

by zentara (Archbishop)
on Dec 29, 2018 at 22:21 UTC ( #1227810=note: print w/replies, xml ) Need Help??


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

Hi, what exactly are you trying to do with Gnome2::Wnck ? Pager? Get root window?

I'm not really a human, but I play one on earth. ..... an animated JAPH
  • Comment on Re: Upgrade Gtk2 to Gtk3, and Gnome2::Wnck breaks

Replies are listed 'Best First'.
Re^2: Upgrade Gtk2 to Gtk3, and Gnome2::Wnck breaks
by Anonymous Monk on Dec 30, 2018 at 09:25 UTC

    >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') { ... } }
      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
Node Status?
node history
Node Type: note [id://1227810]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2019-10-21 11:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?