[GTK3] Fix the transient parent for PathChooser

The filechooser dialog was wrongly transient to the main window causing
weird behaviour, namely the main window moving but dialog remaining in
place when attempting to move the child dialog.

The solution is to pass the parent dialog to PathChooser so it can be
properly set the filechooser dialog transient property.

Fixed the Preferences dialog not being set to be modal to main window.
This commit is contained in:
Calum Lind 2018-09-17 15:54:08 +01:00 committed by Calum Lind
parent 8199928160
commit 92a048625a
7 changed files with 26 additions and 13 deletions

View File

@ -420,7 +420,9 @@ class AddTorrentDialog(component.Component):
self.move_completed_hbox = self.builder.get_object( self.move_completed_hbox = self.builder.get_object(
'hbox_move_completed_chooser' 'hbox_move_completed_chooser'
) )
self.move_completed_path_chooser = PathChooser('move_completed_paths_list') self.move_completed_path_chooser = PathChooser(
'move_completed_paths_list', parent=self.dialog
)
self.move_completed_hbox.add(self.move_completed_path_chooser) self.move_completed_hbox.add(self.move_completed_path_chooser)
self.move_completed_hbox.show_all() self.move_completed_hbox.show_all()
@ -429,7 +431,7 @@ class AddTorrentDialog(component.Component):
'hbox_download_location_chooser' 'hbox_download_location_chooser'
) )
self.download_location_path_chooser = PathChooser( self.download_location_path_chooser = PathChooser(
'download_location_paths_list' 'download_location_paths_list', parent=self.dialog
) )
self.download_location_hbox.add(self.download_location_path_chooser) self.download_location_hbox.add(self.download_location_path_chooser)
self.download_location_hbox.show_all() self.download_location_hbox.show_all()

View File

@ -237,6 +237,7 @@
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="border_width">5</property> <property name="border_width">5</property>
<property name="title" translatable="yes">Preferences</property> <property name="title" translatable="yes">Preferences</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property> <property name="window_position">center-on-parent</property>
<property name="default_width">450</property> <property name="default_width">450</property>
<property name="default_height">500</property> <property name="default_height">500</property>

View File

@ -343,7 +343,9 @@ class MenuBar(component.Component):
self.move_storage_dialog = builder.get_object('move_storage_dialog') self.move_storage_dialog = builder.get_object('move_storage_dialog')
self.move_storage_dialog.set_transient_for(self.mainwindow.window) self.move_storage_dialog.set_transient_for(self.mainwindow.window)
self.move_storage_dialog_hbox = builder.get_object('hbox_entry') self.move_storage_dialog_hbox = builder.get_object('hbox_entry')
self.move_storage_path_chooser = PathChooser('move_completed_paths_list') self.move_storage_path_chooser = PathChooser(
'move_completed_paths_list', self.move_storage_dialog
)
self.move_storage_dialog_hbox.add(self.move_storage_path_chooser) self.move_storage_dialog_hbox.add(self.move_storage_path_chooser)
self.move_storage_dialog_hbox.show_all() self.move_storage_dialog_hbox.show_all()
self.move_storage_path_chooser.set_text(status['download_location']) self.move_storage_path_chooser.set_text(status['download_location'])

View File

@ -58,7 +58,9 @@ class OptionsTab(Tab):
self.button_apply = self.main_builder.get_object('button_apply') self.button_apply = self.main_builder.get_object('button_apply')
self.move_completed_path_chooser = PathChooser('move_completed_paths_list') self.move_completed_path_chooser = PathChooser(
'move_completed_paths_list', parent=component.get('MainWindow').window
)
self.move_completed_path_chooser.set_sensitive( self.move_completed_path_chooser.set_sensitive(
self.tab_widgets['chk_move_completed'].obj.get_active() self.tab_widgets['chk_move_completed'].obj.get_active()
) )

View File

@ -123,9 +123,9 @@ class PathChoosersHandler(component.Component):
class PathChooser(PathChooserComboBox): class PathChooser(PathChooserComboBox):
def __init__(self, paths_config_key=None): def __init__(self, paths_config_key=None, parent=None):
self.paths_config_key = paths_config_key self.paths_config_key = paths_config_key
super(PathChooser, self).__init__() super(PathChooser, self).__init__(parent=parent)
self.chooser_handler = PathChoosersHandler() self.chooser_handler = PathChoosersHandler()
self.chooser_handler.register_chooser(self) self.chooser_handler.register_chooser(self)
self.set_auto_completer_func(self.on_completion) self.set_auto_completer_func(self.on_completion)

View File

@ -18,7 +18,6 @@ from gi.module import get_introspection_module
from gi.repository import Gdk, GObject, Gtk from gi.repository import Gdk, GObject, Gtk
from gi.repository.GObject import SignalFlags from gi.repository.GObject import SignalFlags
import deluge.component as component
from deluge.common import PY2, resource_filename from deluge.common import PY2, resource_filename
from deluge.path_chooser_common import get_completion_paths from deluge.path_chooser_common import get_completion_paths
@ -1130,7 +1129,11 @@ class PathChooserComboBox(GtkGI.Box, StoredValuesPopup, GObject.GObject):
} }
def __init__( def __init__(
self, max_visible_rows=20, auto_complete=True, use_completer_popup=True self,
max_visible_rows=20,
auto_complete=True,
use_completer_popup=True,
parent=None,
): ):
GtkGI.Box.__init__(self) GtkGI.Box.__init__(self)
GObject.GObject.__init__(self) GObject.GObject.__init__(self)
@ -1143,6 +1146,7 @@ class PathChooserComboBox(GtkGI.Box, StoredValuesPopup, GObject.GObject):
self.show_folder_name_on_button = False self.show_folder_name_on_button = False
self.setting_accelerator_key = False self.setting_accelerator_key = False
self.builder = Gtk.Builder() self.builder = Gtk.Builder()
self.parent = parent
self.popup_buttonbox = self.builder.get_object('buttonbox') self.popup_buttonbox = self.builder.get_object('buttonbox')
self.builder.add_from_file( self.builder.add_from_file(
resource_filename( resource_filename(
@ -1156,7 +1160,7 @@ class PathChooserComboBox(GtkGI.Box, StoredValuesPopup, GObject.GObject):
) )
self.filechooser_button = self.open_filechooser_dialog_button self.filechooser_button = self.open_filechooser_dialog_button
self.filechooserdialog = self.builder.get_object('filechooserdialog') self.filechooserdialog = self.builder.get_object('filechooserdialog')
self.filechooserdialog.set_transient_for(component.get('MainWindow').window) self.filechooserdialog.set_transient_for(self.parent)
self.filechooser_widget = self.builder.get_object('filechooser_widget') self.filechooser_widget = self.builder.get_object('filechooser_widget')
self.folder_name_label = self.builder.get_object('folder_name_label') self.folder_name_label = self.builder.get_object('folder_name_label')
self.default_text = None self.default_text = None
@ -1550,7 +1554,7 @@ class PathChooserComboBox(GtkGI.Box, StoredValuesPopup, GObject.GObject):
self.show_folder_name_on_button_checkbutton = self.builder.get_object( self.show_folder_name_on_button_checkbutton = self.builder.get_object(
'show_folder_name_on_button_checkbutton' 'show_folder_name_on_button_checkbutton'
) )
self.config_dialog.set_transient_for(component.get('MainWindow').window) self.config_dialog.set_transient_for(self.parent)
def on_close(widget, event=None): def on_close(widget, event=None):
if not self.setting_accelerator_key: if not self.setting_accelerator_key:

View File

@ -189,7 +189,7 @@ class Preferences(component.Component):
'hbox_download_to_path_chooser' 'hbox_download_to_path_chooser'
) )
self.download_location_path_chooser = PathChooser( self.download_location_path_chooser = PathChooser(
'download_location_paths_list' 'download_location_paths_list', parent=self.pref_dialog
) )
self.download_location_hbox.add(self.download_location_path_chooser) self.download_location_hbox.add(self.download_location_path_chooser)
self.download_location_hbox.show_all() self.download_location_hbox.show_all()
@ -197,7 +197,9 @@ class Preferences(component.Component):
self.move_completed_hbox = self.builder.get_object( self.move_completed_hbox = self.builder.get_object(
'hbox_move_completed_to_path_chooser' 'hbox_move_completed_to_path_chooser'
) )
self.move_completed_path_chooser = PathChooser('move_completed_paths_list') self.move_completed_path_chooser = PathChooser(
'move_completed_paths_list', parent=self.pref_dialog
)
self.move_completed_hbox.add(self.move_completed_path_chooser) self.move_completed_hbox.add(self.move_completed_path_chooser)
self.move_completed_hbox.show_all() self.move_completed_hbox.show_all()
@ -205,7 +207,7 @@ class Preferences(component.Component):
'hbox_copy_torrent_files_path_chooser' 'hbox_copy_torrent_files_path_chooser'
) )
self.copy_torrent_files_path_chooser = PathChooser( self.copy_torrent_files_path_chooser = PathChooser(
'copy_torrent_files_to_paths_list' 'copy_torrent_files_to_paths_list', parent=self.pref_dialog
) )
self.copy_torrents_to_hbox.add(self.copy_torrent_files_path_chooser) self.copy_torrents_to_hbox.add(self.copy_torrent_files_path_chooser)
self.copy_torrents_to_hbox.show_all() self.copy_torrents_to_hbox.show_all()