Skip to content

Commit

Permalink
move add, remove, and delete page methods from guake_app to notebook
Browse files Browse the repository at this point in the history
remove context menus from the glade file since the are edited in code anyways
rewrite the contextmenus to support per terminal menus
remove fullscreen logic from guake_app (to Fullscreenmanager in utils)
remove proxy code since it was diabled since the gtk3 port and needs to be ported but there also no issues on GH currently
move dialogs to dialogs.py
move a lot of code (menus, dialogs, customcommands, themes) to its own files
move terminal related code (like init) to the terminal class
remove a bunch of dead code
mark some methods as keybindings/dbusinterface only
  • Loading branch information
aichingm authored and gsemet committed Aug 31, 2018
1 parent 03c486a commit 0834bad
Show file tree
Hide file tree
Showing 13 changed files with 878 additions and 1,037 deletions.
209 changes: 0 additions & 209 deletions data/guake.glade
Original file line number Diff line number Diff line change
Expand Up @@ -2,215 +2,6 @@
<!-- Generated with glade 3.18.3 -->
<interface domain="guake">
<requires lib="gtk+" version="3.10"/>
<object class="GtkMenu" id="context-menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkImageMenuItem" id="context_copy">
<property name="label" translatable="yes">Copy</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="accel_copy_clipboard" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_paste">
<property name="label" translatable="yes">Paste</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="accel_paste_clipboard" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separador5">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_toggle_fullscreen">
<property name="label" translatable="yes">Toggle Fullscreen</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="accel_toggle_fullscreen" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separador2">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_save_tab">
<property name="label" translatable="yes">Save to File...</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="save_tab" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_reset_terminal">
<property name="label" translatable="yes">Reset terminal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="reset_terminal" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_find_tab">
<property name="label" translatable="yes">Find...</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="find_tab" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separador3">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_add_tab">
<property name="label" translatable="yes">New Tab</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="add_tab" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_rename_tab">
<property name="label" translatable="yes">Rename Tab</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="accel_rename_current_tab" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_close_tab">
<property name="label" translatable="yes">Close Tab</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="close_tab" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separator_search">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_browse_on_web">
<property name="label" translatable="yes">Open link...</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="browse_on_web" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_search_on_web">
<property name="label" translatable="yes">Search on Web</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="search_on_web" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_quick_open">
<property name="label" translatable="yes">Quick Open</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="quick_open" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separador1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_preferences">
<property name="label">gtk-preferences</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="show_prefs" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_about">
<property name="label">gtk-about</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="show_about" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separador4">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="context_close">
<property name="label" translatable="yes">Quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="accel_quit" swapped="no"/>
</object>
</child>
</object>
<object class="GtkMenu" id="tab-menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="add">
<property name="label" translatable="yes">New Tab</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="add_tab" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="rename">
<property name="label" translatable="yes">Rename</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_rename_current_tab_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="close">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_close_activate" swapped="no"/>
</object>
</child>
</object>
<object class="GtkMenu" id="tray-menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
Expand Down
105 changes: 105 additions & 0 deletions guake/boxes.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gdk
from gi.repository import Gtk
from guake.callbacks import TerminalContextMenuCallbacks
from guake.dialogs import RenameDialog
from guake.menus import TabContextMenu
from guake.menus import TerminalContextMenu
from guake.utils import TabNameUtils
from locale import gettext as _
gi.require_version('Vte', '2.91') # vte-0.42
from gi.repository import Vte

# TODO remove calls to guake


class TerminalHolder():
Expand All @@ -17,6 +28,12 @@ def replace_child(self, old, new):
def get_guake(self):
pass

def get_window(self):
pass

def get_settings(self):
pass

def get_root_box(self):
pass

Expand Down Expand Up @@ -57,6 +74,12 @@ def get_child(self):
def get_guake(self):
return self.guake

def get_window(self):
return self.guake.window

def get_settings(self):
return self.guake.settings

def get_root_box(self):
return self

Expand All @@ -81,6 +104,7 @@ def set_terminal(self, terminal):
raise RuntimeError("TerminalBox: terminal already set")
self.terminal = terminal
self.terminal.connect("focus", self.on_terminal_focus)
self.terminal.connect("button-press-event", self.on_button_press, None)
self.pack_start(self.terminal, True, True, 0)
self.terminal.show()
self.add_scroll_bar()
Expand Down Expand Up @@ -122,12 +146,38 @@ def split(self, orientation):
def get_guake(self):
return self.get_parent().get_guake()

def get_window(self):
return self.get_parent().get_window()

def get_settings(self):
return self.get_parent().get_settings()

def get_root_box(self):
return self.get_parent()

def on_terminal_focus(self, direction, user_data):
self.get_root_box().set_last_terminal_focused(self.terminal)

def on_button_press(self, target, event, user_data):
if event.button == 3:
# First send to background process if handled, do nothing else
if not event.get_state() & Gdk.ModifierType.SHIFT_MASK:
if Vte.Terminal.do_button_press_event(self.terminal, event):
return True

menu = TerminalContextMenu(
self.terminal, self.get_window(), self.get_settings(),
TerminalContextMenuCallbacks(
self.terminal, self.get_window(), self.get_settings(),
self.get_guake().notebook
)
)
menu.popup_at_pointer(event)
self.terminal.grab_focus()
return True
self.terminal.grab_focus()
return False


class DualTerminalBox(Gtk.Paned, TerminalHolder):

Expand Down Expand Up @@ -172,5 +222,60 @@ def replace_child(self, old, new):
def get_guake(self):
return self.get_parent().get_guake()

def get_window(self):
return self.get_parent().get_window()

def get_settings(self):
return self.get_parent().get_settings()

def get_root_box(self):
return self.get_parent()


class TabLabelEventBox(Gtk.EventBox):

def __init__(self, notebook, text):
super().__init__()
self.notebook = notebook
self.label = Gtk.Label(text)
self.add(self.label)
self.connect("button-press-event", self.on_button_press, self.label)
self.label.show()

def set_text(self, text):
self.label.set_text(text)

def get_text(self):
return self.label.get_text()

def on_button_press(self, target, event, user_data):
if event.button == 3:
menu = TabContextMenu(self)
menu.popup_at_pointer(event)
self.notebook.get_current_terminal().grab_focus()
return True
if event.button == 2:
self.notebook.delete_page_by_label(self)
return True

self.notebook.get_current_terminal().grab_focus()
return False

def on_new_tab(self, user_data):
self.notebook.new_page_with_focus()

def on_rename(self, user_data):
self.notebook.guake.preventHide = True
dialog = RenameDialog(self.notebook.guake.window, self.label.get_text())
r = dialog.run()
if r == Gtk.ResponseType.ACCEPT:
new_text = TabNameUtils.shorten(dialog.get_text(), self.notebook.guake.settings)
page_num = self.notebook.find_tab_index_by_label(self)
self.notebook.rename_page(page_num, new_text, True)
dialog.destroy()
self.notebook.guake.preventHide = False
# TODO
# self.set_terminal_focus()

def on_close(self, user_data):
self.notebook.delete_page_by_label(self)
Loading

0 comments on commit 0834bad

Please sign in to comment.