def enable_ctrl_m(self):
     if self.config['use_ctr_m']:
         window = self.roster.window
         self.accel_group = Gtk.accel_groups_from_object(window)[0]
         self.accel_group.connect(Gdk.KEY_m, Gdk.ModifierType.CONTROL_MASK,
                                  Gtk.AccelFlags.MASK, self.on_ctrl_m)
         self.config['menu_visible'] = not self.config['menu_visible']
         self.on_ctrl_m()
Beispiel #2
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self, None, None, builder=builder, topwin=topwin)

        self.vm = vm
        self._pointer_is_grabbed = False
        self._change_title()
        self.vm.connect("state-changed", self._change_title)

        # State for disabling modifiers when keyboard is grabbed
        self._accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self._gtk_settings_accel = None
        self._gtk_settings_mnemonic = None

        # Initialize display widget
        self._viewer = None

        # Fullscreen toolbar
        self._keycombo_menu = build_keycombo_menu(self._do_send_key)

        self._overlay_toolbar_fullscreen = vmmOverlayToolbar()
        overlay = self._overlay_toolbar_fullscreen.create(
            name="Fullscreen Toolbar",
            tooltip_text=_("Leave fullscreen"),
            accessible_name="Fullscreen Exit",
            send_key_accessible_name="Fullscreen Send Key",
            on_leave_fn=self._leave_fullscreen,
            on_send_key_fn=self._do_send_key)
        self.widget("console-overlay").add_overlay(overlay)

        # Make viewer widget background always be black
        black = Gdk.Color(0, 0, 0)
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      black)

        self.widget("console-pages").set_show_tabs(False)
        self.widget("serial-pages").set_show_tabs(False)

        self._serial_consoles = []
        self._init_menus()

        # Signals are added by vmmDetails. Don't use connect_signals here
        # or it changes will be overwritten

        self.widget("console-gfx-scroll").connect("size-allocate",
                                                  self._scroll_size_allocate)

        self._refresh_widget_states()
        self._refresh_scaling_from_settings()

        self.add_gsettings_handle(
            self.vm.on_console_scaling_changed(
                self._refresh_scaling_from_settings))
        self._refresh_resizeguest_from_settings()
        self.add_gsettings_handle(
            self.vm.on_console_resizeguest_changed(
                self._refresh_resizeguest_from_settings))
        self.add_gsettings_handle(
            self.config.on_console_accels_changed(self._refresh_enable_accel))
Beispiel #3
0
def create(toolbar):
    '''Set of instructions to create the search widget in a toolbar.'''

    # Search components
    toolbar.search_combo_tb = Gtk.ToolItem()
    toolbar.search_combo_align = Gtk.Alignment.new(0, 0.5, 0, 0)
    store = Gtk.ListStore(GdkPixbuf.Pixbuf, str)
    toolbar.search_combo = Gtk.ComboBox.new_with_model(store)
    rendererText = Gtk.CellRendererText()
    rendererPix = Gtk.CellRendererPixbuf()
    toolbar.search_combo.pack_start(rendererPix, False)
    toolbar.search_combo.pack_start(rendererText, True)
    toolbar.search_combo.add_attribute(rendererPix, 'pixbuf', 0)
    toolbar.search_combo.add_attribute(rendererText, 'text', 1)

    options = {
        'String':
        GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_string_16.png')),
        'String no case':
        GdkPixbuf.Pixbuf.new_from_file(
            datafile_path('icon_string_no_case_16.png')),
        'Hexadecimal':
        GdkPixbuf.Pixbuf.new_from_file(
            datafile_path('icon_hexadecimal_16.png')),
        'Regexp':
        GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_regexp_16.png'))
    }

    for option in options.keys():
        store.append([options[option], option])
    toolbar.search_combo.set_active(0)
    toolbar.search_combo_align.add(toolbar.search_combo)
    toolbar.search_combo_tb.add(toolbar.search_combo_align)
    toolbar.main_tb.insert(toolbar.search_combo_tb, -1)

    # Separator
    toolbar.sep = Gtk.SeparatorToolItem()
    toolbar.sep.set_draw(False)
    toolbar.main_tb.insert(toolbar.sep, -1)

    toolbar.search_entry_tb = Gtk.ToolItem()
    toolbar.search_entry = Gtk.Entry()
    toolbar.search_entry.set_max_length(100)
    toolbar.search_entry.set_text('Text to search')
    toolbar.search_entry.set_icon_from_stock(1, Gtk.STOCK_FIND)
    toolbar.search_entry.set_icon_tooltip_text(1, 'Search')
    toolbar.search_entry.connect("activate", toolbar.search)
    toolbar.search_entry.connect("icon-press", toolbar.search)
    toolbar.search_entry.connect('focus-in-event', toolbar._clean, 'in')
    toolbar.search_entry.connect('focus-out-event', toolbar._clean, 'out')
    toolbar.search_entry_tb.add(toolbar.search_entry)
    # We use the AccelGroup object from the main window.
    my_accel = Gtk.accel_groups_from_object(toolbar.main.window)[0]
    key, mod = Gtk.accelerator_parse('<Control>F')
    toolbar.search_entry.set_tooltip_text('Control-F to search')
    toolbar.search_entry.add_accelerator('grab-focus', my_accel, key, mod,
                                         Gtk.AccelFlags.MASK)
    toolbar.main_tb.insert(toolbar.search_entry_tb, -1)
Beispiel #4
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self, None, None, builder=builder, topwin=topwin)

        self.vm = vm
        self._pointer_is_grabbed = False
        self._change_title()
        self.vm.connect("state-changed", self._change_title)
        self._force_resize = False

        # State for disabling modifiers when keyboard is grabbed
        self._accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self._gtk_settings_accel = None
        self._gtk_settings_mnemonic = None

        # Initialize display widget
        self._viewer = None

        # Fullscreen toolbar
        self._send_key_button = None
        self._fs_toolbar = None
        self._fs_drawer = None
        self._keycombo_toolbar = self._build_keycombo_menu()
        self._keycombo_menu = self._build_keycombo_menu()
        self._init_fs_toolbar()

        # Make viewer widget background always be black
        black = Gdk.Color(0, 0, 0)
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      black)

        self.widget("console-pages").set_show_tabs(False)
        self.widget("serial-pages").set_show_tabs(False)

        self._serial_consoles = []
        self._init_menus()

        # Signals are added by vmmDetails. Don't use connect_signals here
        # or it changes will be overwritten

        self.widget("console-gfx-scroll").connect("size-allocate",
            self._scroll_size_allocate)

        self._refresh_widget_states()
        self._refresh_scaling_from_settings()

        self.add_gsettings_handle(
            self.vm.on_console_scaling_changed(
                self._refresh_scaling_from_settings))
        self._refresh_resizeguest_from_settings()
        self.add_gsettings_handle(
            self.vm.on_console_resizeguest_changed(
                self._refresh_resizeguest_from_settings))
        self.add_gsettings_handle(
            self.config.on_console_accels_changed(self._refresh_enable_accel))
Beispiel #5
0
def menubar_osx(gtkui, osxapp):
    window = gtkui.mainwindow
    glade = window.main_glade
    menubar = glade.get_object("menubar")
    group = Gtk.accel_groups_from_object(window.window)[0]

    config = ConfigManager("gtkui.conf")

    # NOTE: accel maps doesn't work with glade file format
    # because of libglade not setting MenuItem accel groups
    # That's why we remove / set accelerators by hand... (dirty)
    # Clean solution: migrate glades files to gtkbuilder format
    file_menu = glade.get_object("menu_file").get_submenu()
    file_items = file_menu.get_children()
    accel_meta(file_items[0], group, 'o')
    accel_meta(file_items[1], group, 'n')
    quit_all_item = file_items[3]
    accel_swap(quit_all_item, group, 'q',
               Gdk.ModifierType.SHIFT_MASK | Gdk.ModifierType.CONTROL_MASK,
               'q', Gdk.ModifierType.SHIFT_MASK | Gdk.EventMask.META_MASK)
    for item in range(2, len(file_items)):  # remove quits
        file_menu.remove(file_items[item])

    menu_widget = glade.get_object("menu_edit")
    edit_menu = menu_widget.get_submenu()
    edit_items = edit_menu.get_children()
    pref_item = edit_items[0]
    accel_swap(pref_item, group, 'p', Gdk.ModifierType.CONTROL_MASK, ',',
               Gdk.EventMask.META_MASK)
    edit_menu.remove(pref_item)

    conn_item = edit_items[1]
    accel_meta(conn_item, group, 'm')
    edit_menu.remove(conn_item)

    menubar.remove(menu_widget)

    help_menu = glade.get_object("menu_help").get_submenu()
    help_items = help_menu.get_children()
    about_item = help_items[4]
    help_menu.remove(about_item)
    help_menu.remove(help_items[3])  # separator

    menubar.hide()
    osxapp.set_menu_bar(menubar)
    # populate app menu
    osxapp.insert_app_menu_item(about_item, 0)
    osxapp.insert_app_menu_item(Gtk.SeparatorMenuItem(), 1)
    osxapp.insert_app_menu_item(pref_item, 2)
    if not config["classic_mode"]:
        osxapp.insert_app_menu_item(conn_item, 3)
    if quit_all_item.get_visible():
        osxapp.insert_app_menu_item(Gtk.SeparatorMenuItem(), 4)
        osxapp.insert_app_menu_item(quit_all_item, 5)
Beispiel #6
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self, None, None, builder=builder, topwin=topwin)

        self.vm = vm
        self._pointer_is_grabbed = False
        self._change_title()
        self.vm.connect("state-changed", self._change_title)
        self._force_resize = False

        # State for disabling modifiers when keyboard is grabbed
        self._accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self._gtk_settings_accel = None
        self._gtk_settings_mnemonic = None

        # Initialize display widget
        self._viewer = None
        self._viewer_is_connected = False

        # Fullscreen toolbar
        self._send_key_button = None
        self._fs_toolbar = None
        self._fs_drawer = None
        self._keycombo_menu = self._build_keycombo_menu(self._do_send_key)
        self._init_fs_toolbar()

        # Make viewer widget background always be black
        black = Gdk.Color(0, 0, 0)
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      black)

        self._serial_tabs = []
        self._last_gfx_page = 0
        self._init_menus()

        # Signals are added by vmmDetails. Don't use connect_signals here
        # or it changes will be overwritten

        self._refresh_can_fullscreen()
        self._refresh_scaling_from_settings()
        self.add_gsettings_handle(
            self.vm.on_console_scaling_changed(
                self._refresh_scaling_from_settings))
        self._refresh_resizeguest_from_settings()
        self.add_gsettings_handle(
            self.vm.on_console_resizeguest_changed(
                self._refresh_resizeguest_from_settings))

        scroll = self.widget("console-gfx-scroll")
        scroll.connect("size-allocate", self._scroll_size_allocate)
        self.add_gsettings_handle(
            self.config.on_console_accels_changed(self._refresh_enable_accel))

        self._page_changed()
Beispiel #7
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self, None, None, builder=builder, topwin=topwin)

        self.vm = vm
        self.pointer_is_grabbed = False
        self.change_title()
        self.vm.connect("config-changed", self.change_title)

        # State for disabling modifiers when keyboard is grabbed
        self.accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self.gtk_settings_accel = None
        self.gtk_settings_mnemonic = None

        # Initialize display widget
        self.viewer = None
        self.tunnels = None
        self.viewerRetriesScheduled = 0
        self.viewerRetryDelay = 125
        self._viewer_connected = False
        self.viewer_connecting = False
        self.scale_type = self.vm.get_console_scaling()

        # Fullscreen toolbar
        self.send_key_button = None
        self.fs_toolbar = None
        self.fs_drawer = None
        self.keycombo_menu = uihelpers.build_keycombo_menu(self.send_key)
        self.init_fs_toolbar()

        finish_img = Gtk.Image.new_from_stock(Gtk.STOCK_YES,
                                              Gtk.IconSize.BUTTON)
        self.widget("console-auth-login").set_image(finish_img)

        # Make viewer widget background always be black
        black = Gdk.Color(0, 0, 0)
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      black)

        # Signals are added by vmmDetails. Don't use connect_signals here
        # or it changes will be overwritten

        self.refresh_scaling()
        self.add_gconf_handle(
            self.vm.on_console_scaling_changed(self.refresh_scaling))

        scroll = self.widget("console-gfx-scroll")
        scroll.connect("size-allocate", self.scroll_size_allocate)
        self.add_gconf_handle(
            self.config.on_console_accels_changed(self.set_enable_accel))
        self.add_gconf_handle(
            self.config.on_keys_combination_changed(self.grab_keys_changed))

        self.page_changed()
Beispiel #8
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self, None, None, builder=builder, topwin=topwin)

        self.vm = vm
        self.pointer_is_grabbed = False
        self.change_title()
        self.vm.connect("config-changed", self.change_title)

        # State for disabling modifiers when keyboard is grabbed
        self.accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self.gtk_settings_accel = None
        self.gtk_settings_mnemonic = None

        # Initialize display widget
        self.viewer = None
        self.tunnels = None
        self.viewerRetriesScheduled = 0
        self.viewerRetryDelay = 125
        self._viewer_connected = False
        self.viewer_connecting = False
        self.scale_type = self.vm.get_console_scaling()

        # Fullscreen toolbar
        self.send_key_button = None
        self.fs_toolbar = None
        self.fs_drawer = None
        self.keycombo_menu = uihelpers.build_keycombo_menu(self.send_key)
        self.init_fs_toolbar()

        finish_img = Gtk.Image.new_from_stock(Gtk.STOCK_YES,
                                              Gtk.IconSize.BUTTON)
        self.widget("console-auth-login").set_image(finish_img)

        # Make viewer widget background always be black
        black = Gdk.Color(0, 0, 0)
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      black)

        # Signals are added by vmmDetails. Don't use connect_signals here
        # or it changes will be overwritten

        self.refresh_scaling()
        self.add_gconf_handle(
            self.vm.on_console_scaling_changed(self.refresh_scaling))

        scroll = self.widget("console-gfx-scroll")
        scroll.connect("size-allocate", self.scroll_size_allocate)
        self.add_gconf_handle(
            self.config.on_console_accels_changed(self.set_enable_accel))
        self.add_gconf_handle(
            self.config.on_keys_combination_changed(self.grab_keys_changed))

        self.page_changed()
Beispiel #9
0
def menubar_osx(gtkui, osxapp):
	window = gtkui.mainwindow
	glade  = window.main_glade
	menubar = glade.get_object("menubar")
	group = Gtk.accel_groups_from_object(window.window)[0]

	config = ConfigManager("gtkui.conf")

	# NOTE: accel maps doesn't work with glade file format
	# because of libglade not setting MenuItem accel groups
	# That's why we remove / set accelerators by hand... (dirty)
	# Clean solution: migrate glades files to gtkbuilder format
	file_menu = glade.get_object("menu_file").get_submenu()
	file_items = file_menu.get_children()
	accel_meta(file_items[0], group, 'o')
	accel_meta(file_items[1], group, 'n')
	quit_all_item = file_items[3]
	accel_swap(quit_all_item, group, 'q', Gdk.ModifierType.SHIFT_MASK | Gdk.ModifierType.CONTROL_MASK,
										  'q', Gdk.ModifierType.SHIFT_MASK | Gdk.EventMask.META_MASK)
	for item in range(2, len(file_items)): # remove quits
		file_menu.remove(file_items[item])

	menu_widget = glade.get_object("menu_edit")
	edit_menu = menu_widget.get_submenu()
	edit_items = edit_menu.get_children()
	pref_item = edit_items[0]
	accel_swap(pref_item, group, 'p', Gdk.ModifierType.CONTROL_MASK, ',', Gdk.EventMask.META_MASK)
	edit_menu.remove(pref_item)

	conn_item = edit_items[1]
	accel_meta(conn_item, group, 'm')
	edit_menu.remove(conn_item)

	menubar.remove(menu_widget)

	help_menu = glade.get_object("menu_help").get_submenu()
	help_items = help_menu.get_children()
	about_item = help_items[4]
	help_menu.remove(about_item)
	help_menu.remove(help_items[3]) # separator

	menubar.hide()
	osxapp.set_menu_bar(menubar)
	# populate app menu
	osxapp.insert_app_menu_item(about_item, 0)
	osxapp.insert_app_menu_item(Gtk.SeparatorMenuItem(), 1)
	osxapp.insert_app_menu_item(pref_item, 2)
	if not config["classic_mode"]:
		osxapp.insert_app_menu_item(conn_item, 3)
	if quit_all_item.get_visible():
		osxapp.insert_app_menu_item(Gtk.SeparatorMenuItem(), 4)
		osxapp.insert_app_menu_item(quit_all_item, 5)
Beispiel #10
0
def create(toolbar):
    '''Set of instructions to create the search widget in a toolbar.'''

    # Search components
    toolbar.search_combo_tb = Gtk.ToolItem()
    toolbar.search_combo_align = Gtk.Alignment.new(0, 0.5, 0, 0)
    store = Gtk.ListStore(GdkPixbuf.Pixbuf, str)
    toolbar.search_combo = Gtk.ComboBox.new_with_model(store)
    rendererText = Gtk.CellRendererText()
    rendererPix = Gtk.CellRendererPixbuf()
    toolbar.search_combo.pack_start(rendererPix, False)
    toolbar.search_combo.pack_start(rendererText, True)
    toolbar.search_combo.add_attribute(rendererPix, 'pixbuf', 0)
    toolbar.search_combo.add_attribute(rendererText, 'text', 1)

    options = {
        'String':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_string_16.png')),
        'String no case':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_string_no_case_16.png')),
        'Hexadecimal':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_hexadecimal_16.png')),
        'Regexp':GdkPixbuf.Pixbuf.new_from_file(datafile_path('icon_regexp_16.png'))
    }

    for option in options.keys():
        store.append([options[option], option])
    toolbar.search_combo.set_active(0)
    toolbar.search_combo_align.add(toolbar.search_combo)
    toolbar.search_combo_tb.add(toolbar.search_combo_align)
    toolbar.main_tb.insert(toolbar.search_combo_tb, -1)

    # Separator
    toolbar.sep = Gtk.SeparatorToolItem()
    toolbar.sep.set_draw(False)
    toolbar.main_tb.insert(toolbar.sep, -1)

    toolbar.search_entry_tb = Gtk.ToolItem()
    toolbar.search_entry = Gtk.Entry()
    toolbar.search_entry.set_max_length(100)
    toolbar.search_entry.set_text('Text to search')
    toolbar.search_entry.set_icon_from_stock(1, Gtk.STOCK_FIND)
    toolbar.search_entry.set_icon_tooltip_text(1, 'Search')
    toolbar.search_entry.connect("activate", toolbar.search)
    toolbar.search_entry.connect("icon-press", toolbar.search)
    toolbar.search_entry.connect('focus-in-event', toolbar._clean, 'in')
    toolbar.search_entry.connect('focus-out-event', toolbar._clean, 'out')
    toolbar.search_entry_tb.add(toolbar.search_entry)
    # We use the AccelGroup object from the main window.
    my_accel = Gtk.accel_groups_from_object(toolbar.main.window)[0]
    key, mod = Gtk.accelerator_parse('<Control>F')
    toolbar.search_entry.set_tooltip_text('Control-F to search')
    toolbar.search_entry.add_accelerator('grab-focus', my_accel, key, mod, Gtk.AccelFlags.MASK)
    toolbar.main_tb.insert(toolbar.search_entry_tb, -1)
Beispiel #11
0
 def create_accelgroup_page(self):
     accel_group = Gtk.accel_groups_from_object(self.window)[0]
     accel_store = Gtk.TreeStore(str, str)
     def add_accel(key, closure, data):
         label = Gtk.accelerator_get_label(key.accel_key, key.accel_mods)
         accel_store.append(None, [label, str(closure)])
     accel_group.find(add_accel, None)
     tree = Gtk.TreeView(accel_store)
     tree.connect('button-press-event', self.on_button_press_event)
     column = Gtk.TreeViewColumn('Key', Gtk.CellRendererText(), text=0)
     tree.append_column(column)
     column = Gtk.TreeViewColumn('Closure', Gtk.CellRendererText(), text=1)
     tree.append_column(column)
     win = Gtk.ScrolledWindow()
     win.add(tree)
     return win
Beispiel #12
0
 def _attach_groups(self, win, accel_groups):
     # get groups currently attached to the window; we use them
     # to avoid reattaching an accelerator to the same window, which
     # generates messages like:
     #
     # gtk-critical **: file gtkaccelgroup.c: line 188
     # (gtk_accel_group_attach): assertion `g_slist_find
     # (accel_group->attach_objects, object) == null' failed.
     #
     # interestingly, this happens many times with notebook,
     # because libglade creates and attaches groups in runtime to
     # its toplevel window.
     current_groups = Gtk.accel_groups_from_object(win)
     for group in accel_groups:
         if group in current_groups:
             # skip group already attached
             continue
         win.add_accel_group(group)
Beispiel #13
0
    def create_accelgroup_page(self):
        accel_group = Gtk.accel_groups_from_object(self.window)[0]
        accel_store = Gtk.TreeStore(str, str)

        def add_accel(key, closure, data):
            label = Gtk.accelerator_get_label(key.accel_key, key.accel_mods)
            accel_store.append(None, [label, str(closure)])

        accel_group.find(add_accel, None)
        tree = Gtk.TreeView(accel_store)
        tree.connect('button-press-event', self.on_button_press_event)
        column = Gtk.TreeViewColumn('Key', Gtk.CellRendererText(), text=0)
        tree.append_column(column)
        column = Gtk.TreeViewColumn('Closure', Gtk.CellRendererText(), text=1)
        tree.append_column(column)
        win = Gtk.ScrolledWindow()
        win.add(tree)
        return win
Beispiel #14
0
    def __init__(self, plugin, chat_control):
        self.plugin = plugin
        self.chat_control = chat_control
        actions_hbox = chat_control.xml.get_object('hbox')

        self.button = Gtk.Button(label=None, stock=None, use_underline=True)
        self.button.get_style_context().add_class(
            'chatcontrol-actionbar-button')
        self.button.set_property('relief', Gtk.ReliefStyle.NONE)
        self.button.set_property('can-focus', False)
        img = Gtk.Image()
        img.set_from_icon_name('image-x-generic-symbolic.symbolic',
            Gtk.IconSize.MENU)
        self.button.set_image(img)
        self.button.set_tooltip_text('Send image (Alt+L)')
        ag = Gtk.accel_groups_from_object(self.chat_control.parent_win.window)[0]
        self.button.add_accelerator('activate', ag, Gdk.KEY_L,
            Gdk.ModifierType.MOD1_MASK, Gtk.AccelFlags.VISIBLE)

        actions_hbox.pack_start(self.button, False, False , 0)
        actions_hbox.reorder_child(self.button,
            len(actions_hbox.get_children()) - 2)
        id_ = self.button.connect('clicked', self.on_image_button_clicked)
        self.button.show()
Beispiel #15
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self,
                              "console.ui",
                              None,
                              builder=builder,
                              topwin=topwin)

        self.vm = vm
        self.top_box = self.widget("console-pages")
        self._pointer_is_grabbed = False

        # State for disabling modifiers when keyboard is grabbed
        self._accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self._gtk_settings_accel = None
        self._gtk_settings_mnemonic = None

        # Initialize display widget
        self._viewer = None
        self._viewer_connect_clicked = False
        self._in_fullscreen = False

        # Fullscreen toolbar
        self._keycombo_menu = build_keycombo_menu(self._do_send_key)
        self._console_list_menu = Gtk.Menu()
        self._console_list_menu.connect("show",
                                        self._populate_console_list_menu)

        self._overlay_toolbar_fullscreen = vmmOverlayToolbar(
            on_leave_fn=self._leave_fullscreen,
            on_send_key_fn=self._do_send_key)
        self.widget("console-overlay").add_overlay(
            self._overlay_toolbar_fullscreen.timed_revealer.get_overlay_widget(
            ))

        # When the gtk-vnc and spice-gtk widgets are in non-scaling mode, we
        # make them fill the whole window, and they paint the non-VM areas of
        # the viewer black. But when scaling is enabled, the viewer widget is
        # constrained. This change makes sure the non-VM portions in that case
        # are also colored black, rather than the default theme window color.
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      Gdk.Color(0, 0, 0))

        self.widget("console-pages").set_show_tabs(False)
        self.widget("serial-pages").set_show_tabs(False)
        self.widget("console-gfx-pages").set_show_tabs(False)

        self._consolemenu = _ConsoleMenu()
        self._serial_consoles = []

        # Signals are added by vmmVMWindow. Don't use connect_signals here
        # or it changes will be overwritten

        self.builder.connect_signals({
            "on_console_pages_switch_page":
            self._page_changed_cb,
            "on_console_auth_password_activate":
            self._auth_login_cb,
            "on_console_auth_login_clicked":
            self._auth_login_cb,
            "on_console_connect_button_clicked":
            self._connect_button_clicked_cb,
        })

        self.widget("console-gfx-scroll").connect("size-allocate",
                                                  self._scroll_size_allocate)
        self.widget("console-gfx-pages").connect("switch-page",
                                                 self._page_changed_cb)
Beispiel #16
0
    def __init__(self, vm, builder, topwin):
        vmmGObjectUI.__init__(self,
                              "console.ui",
                              None,
                              builder=builder,
                              topwin=topwin)

        self.vm = vm
        self.top_box = self.widget("console-pages")
        self._pointer_is_grabbed = False

        # State for disabling modifiers when keyboard is grabbed
        self._accel_groups = Gtk.accel_groups_from_object(self.topwin)
        self._gtk_settings_accel = None
        self._gtk_settings_mnemonic = None

        # Initialize display widget
        self._viewer = None
        self._viewer_connect_clicked = False
        self._in_fullscreen = False

        # Fullscreen toolbar
        self._keycombo_menu = build_keycombo_menu(self._do_send_key)
        self._console_list_menu = Gtk.Menu()
        self._console_list_menu.connect("show",
                                        self._populate_console_list_menu)

        self._overlay_toolbar_fullscreen = vmmOverlayToolbar(
            on_leave_fn=self._leave_fullscreen,
            on_send_key_fn=self._do_send_key)
        self.widget("console-overlay").add_overlay(
            self._overlay_toolbar_fullscreen.timed_revealer.get_overlay_widget(
            ))

        # Make viewer widget background always be black
        black = Gdk.Color(0, 0, 0)
        self.widget("console-gfx-viewport").modify_bg(Gtk.StateType.NORMAL,
                                                      black)

        self.widget("console-pages").set_show_tabs(False)
        self.widget("serial-pages").set_show_tabs(False)
        self.widget("console-gfx-pages").set_show_tabs(False)

        self._consolemenu = _ConsoleMenu()
        self._serial_consoles = []

        # Signals are added by vmmVMWindow. Don't use connect_signals here
        # or it changes will be overwritten

        self.builder.connect_signals({
            "on_console_pages_switch_page":
            self._page_changed_cb,
            "on_console_auth_password_activate":
            self._auth_login_cb,
            "on_console_auth_login_clicked":
            self._auth_login_cb,
            "on_console_connect_button_clicked":
            self._connect_button_clicked_cb,
        })

        self.widget("console-gfx-scroll").connect("size-allocate",
                                                  self._scroll_size_allocate)
        self.widget("console-gfx-pages").connect("switch-page",
                                                 self._page_changed_cb)
Beispiel #17
0
    def __init__(self, window):
        self.window = window
        self.loc_entry1 = self.loc_entry2 = None
        self.menubar = None
        self.menu_items = {}

        # Find the main paned widget and the menubar.
        self.main_paned = menubar = None
        walker = walk(window, False)
        for w in walker:
            name = w.get_name()
            if name == 'NautilusToolbar':
                p = w.get_parent()
                while not isinstance(p, Gtk.Paned):
                    p = p.get_parent()
                self.main_paned = p
                walker.skip_children()
            if name == 'MenuBar':
                self.menubar = w
                walker.skip_children()

        if self.main_paned != None:
            # Find location entries.
            self.loc_entry1 = self.find_loc_entry(self.main_paned.get_child1())
            self.loc_entry2 = self.find_loc_entry(self.main_paned.get_child2())
        else:
            logging.error("main paned not found")

        accel_group = Gtk.accel_groups_from_object(window)[0]

        def connect(accel, func):
            key, mods = Gtk.accelerator_parse(accel)
            accel_group.connect(key, mods, Gtk.AccelFlags.VISIBLE, func)

        connect('F4', self.on_edit)
        connect('F5', self.on_copy)
        connect('F6', self.on_move)
        connect('F8', self.on_delete)

        if self.loc_entry1 != None:
            # TODO: look how nautilus-open-terminal work
            connect('<Ctrl>O', self.on_terminal)
            connect('<Ctrl>G', self.on_git)
        else:
            logging.error("location entry not found")

        if self.menubar != None:
            for w in walk(self.menubar):
                name = w.get_name()
                if SHOW_EXTRA_PANE and name == 'Show Hide Extra Pane':
                    w.activate()
                elif name == 'Edit':
                    item = Gtk.MenuItem(
                        "_Keyboard Shortcuts...", use_underline=True)
                    w.add(item)
                    item.show()
                    item.connect('activate',
                        self.show_keyboard_shortcuts_dialog)
        else:
            logging.error("menu bar not found")

        if DEBUG:
            # Add the widget inspector.
            from nautilus_debug import WidgetInspector
            child = window.get_child()
            inspector = WidgetInspector(window)
            window.remove(child)
            paned = Gtk.VPaned()
            paned.pack1(child, True, True)
            paned.pack2(inspector, False, False)
            paned.show()
            window.add(paned)
Beispiel #18
0
    def __init__(self, toplevel=None, widgets=None, gladefile=None,
                 toplevel_name=None, domain=None):
        """ Creates a new SlaveView. Sets up self.toplevel and self.widgets
        and checks for reserved names.
        """
        GObject.GObject.__init__(self)

        self._broker = None
        self.slaves = collections.OrderedDict()
        self._proxies = []
        self.is_valid = True

        # slave/widget name -> validation status
        self._validation = {}
        self._forms = {}
        self._forms_attached = False

        # stores the function that will be called when widgets
        # validity is checked
        self._validate_function = None

        # setup the initial state with the value of the arguments or the
        # class variables
        klass = type(self)
        self.toplevel = toplevel or getattr(self, 'toplevel', klass.toplevel)
        self.widgets = widgets or klass.widgets
        self.gladefile = gladefile or klass.gladefile

        self.toplevel_name = (
            toplevel_name or
            klass.toplevel_name)

        if not self.toplevel_name and self.gladefile:
            self.toplevel_name = os.path.splitext(
                os.path.basename(self.gladefile))[0]

        self.domain = domain or klass.domain
        # Fallback to domain if translation_domain is not provided
        self.translation_domain = klass.translation_domain or self.domain

        self._check_reserved()

        # Make it possible to run a view without a glade file, to be able
        # to attach slaves we need the toplevel widget to be an EventBox.
        if not self.gladefile and self.toplevel is None:
            self.toplevel = Gtk.Window()
            self.toplevel.set_name('KiwiViewWindow')

        # Forms create widgets that we want to connect signals to,
        # so this needs to be done before the View constructor
        if self.fields:
            self.add_form(self.fields)

        self._glade_adaptor = self.get_glade_adaptor()
        self.toplevel = self._get_toplevel()

        # grab the accel groups
        self._accel_groups = Gtk.accel_groups_from_object(self.toplevel)

        # XXX: support normal widgets
        # notebook page label widget ->
        #   dict (slave name -> validation status)
        self._notebook_validation = {}
        self._notebooks = self._get_notebooks()
        if len(self._notebooks) == 1:
            register_notebook_shortcuts(self, self._notebooks[0])

        # FIXME: This is a hack to avoid a toplevel window
        #        showing up, I cannot quite figure out how it works
        #        probably related to attach_slave(), Johan 2012-06-19
        if self.fields and not self.gladefile:
            self.toplevel.hide()