#!/usr/pkg/bin/python3.12
#
# This script should be linked to a keyboard shortcut. Under gnome,
# you can do this from the main preferences menu, or directly execute
# "gnome-keybinding-properties"
#
# Make the script executable. Install it somewhere in the executable
# path ("echo $PATH" to check what's in there), and then just enter
# its name as the action to perform, or copy it anywhere and copy the
# full path as the action.
#
# The script will start recoll if there is currently no instance
# running, or else toggle between minimized/shown

import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck
from gi.repository import Gtk

import os
import sys
from optparse import OptionParser

def deb(s):
    print("%s"%s, file=sys.stderr)
    
def main():
    parser = OptionParser()
    parser.add_option("-m", "--move-away", action="store_true", default=False,
                      dest="clear_workspace", 
                      help="iconify to other workspace to avoid crowding panel")
    (options, args) = parser.parse_args()

    screen = Wnck.Screen.get_default()
    
    while Gtk.events_pending():
        Gtk.main_iteration()

    recollMain = ""
    recollwins = [];
    for window in screen.get_windows():
        #deb(f"Win class name: [{window.get_class_group().get_name()}] name [{window.get_name()}]")
        if window.get_class_group().get_name().lower() == "recoll":
            if window.get_name().lower().startswith("recoll"):
                recollMain = window
            recollwins.append(window)

    if not recollMain:
        deb("No Recoll window found, starting program")
        os.system("recoll&")
        sys.exit(0)

    # Check the main window state, and either activate or minimize all
    # recoll windows.
    workspace = screen.get_active_workspace()
    if not recollMain.is_visible_on_workspace(workspace):
        for win in recollwins:
            win.move_to_workspace(workspace)
            if win != recollMain:
                win.unminimize(Gtk.get_current_event_time())
        recollMain.activate(Gtk.get_current_event_time())
    else:
        otherworkspace = None
        if options.clear_workspace:
            # We try to minimize to another workspace
            wkspcs = screen.get_workspaces()
            for wkspc in wkspcs:
                if wkspc.get_number() != workspace.get_number():
                    otherworkspace = wkspc
                    break
        for win in recollwins:
            if otherworkspace:
                win.move_to_workspace(otherworkspace)
            win.minimize()

if __name__ == '__main__':
  main()
  
