def run_dialog(dialog, parent=None, *args, **kwargs): """Runs a dialog and return the return value of it. If dialog is a class it will be instantiated before running the dialog. :param dialog: the dialog class :param parent: parent of the dialog :param args: custom positional arguments :param kwargs: custom keyword arguments """ if dialog is None: raise TypeError("dialog cannot be None") dialog = RunDialogEvent.emit(dialog, parent, *args, **kwargs) if not issubclass(dialog, RunnableView): raise TypeError("dialog %r must be subclass of RunnableView" % ( dialog, )) # FIXME: Move this into RunnableView parent = getattr(parent, 'main_dialog', parent) parent = parent or get_current_toplevel() if inspect.isclass(dialog): dialog_name = dialog.__name__ else: dialog_name = dialog.__class__.__name__ dialog = get_dialog(parent, dialog, *args, **kwargs) orig_dialog = dialog toplevel = dialog.get_current_toplevel() add_current_toplevel(toplevel) if _fullscreen is not None: toplevel.set_position(gtk.WIN_POS_CENTER) elif parent and isinstance(parent, gtk.Window) and parent.props.visible: toplevel.set_transient_for(parent) toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT) else: if parent: toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT) else: toplevel.set_position(gtk.WIN_POS_CENTER) # FIXME: This should not be necessary, but gnome shell hides window # decorations for HINT_DIALOG. We should study what dialogs should # have HINT_NORMAL (with window decorations) and what can have # HINT_DIALOG toplevel.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL) log.info("%s: Opening" % dialog_name) if hasattr(parent, 'on_dialog__opened'): parent.on_dialog__opened(orig_dialog) retval = run_dialog_internal(dialog, parent, toplevel) _pop_current_toplevel() return retval
def run_dialog(dialog, parent=None, *args, **kwargs): """Runs a dialog and return the return value of it. If dialog is a class it will be instantiated before running the dialog. :param dialog: the dialog class :param parent: parent of the dialog :param args: custom positional arguments :param kwargs: custom keyword arguments """ if dialog is None: raise TypeError("dialog cannot be None") dialog = RunDialogEvent.emit(dialog, parent, *args, **kwargs) if not issubclass(dialog, RunnableView): raise TypeError("dialog %r must be subclass of RunnableView" % (dialog, )) # FIXME: Move this into RunnableView parent = getattr(parent, 'main_dialog', parent) parent = parent or get_current_toplevel() if inspect.isclass(dialog): dialog_name = dialog.__name__ else: dialog_name = dialog.__class__.__name__ dialog = get_dialog(parent, dialog, *args, **kwargs) orig_dialog = dialog toplevel = dialog.get_current_toplevel() add_current_toplevel(toplevel) if _fullscreen is not None: toplevel.set_position(gtk.WIN_POS_CENTER) elif parent and isinstance(parent, gtk.Window) and parent.props.visible: toplevel.set_transient_for(parent) toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT) else: if parent: toplevel.set_position(gtk.WIN_POS_CENTER_ON_PARENT) else: toplevel.set_position(gtk.WIN_POS_CENTER) # FIXME: This should not be necessary, but gnome shell hides window # decorations for HINT_DIALOG. We should study what dialogs should # have HINT_NORMAL (with window decorations) and what can have # HINT_DIALOG toplevel.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL) if hasattr(parent, 'on_dialog__opened'): parent.on_dialog__opened(orig_dialog) log.info("%s: Opening" % dialog_name) # FIXME: We should avoid calling dialog.run() here # See http://tinyurl.com/lj6ske4 toplevel.run() retval = dialog.retval dialog.destroy() _pop_current_toplevel() return retval
def run_dialog(dialog, parent=None, *args, **kwargs): """Runs a dialog and return the return value of it. If dialog is a class it will be instantiated before running the dialog. :param dialog: the dialog class :param parent: parent of the dialog :param args: custom positional arguments :param kwargs: custom keyword arguments """ if dialog is None: raise TypeError("dialog cannot be None") dialog = RunDialogEvent.emit(dialog, parent, *args, **kwargs) if not issubclass(dialog, RunnableView): raise TypeError("dialog %r must be subclass of RunnableView" % (dialog, )) # FIXME: Move this into RunnableView #XXX: When create a new Stoq window, even using the parent correctly: # The called dialog will be a modal of the latest created window # (not necessarily the window that called). parent = getattr(parent, 'main_dialog', parent) parent = parent or get_current_toplevel() if inspect.isclass(dialog): dialog_name = dialog.__name__ else: dialog_name = dialog.__class__.__name__ dialog = get_dialog(parent, dialog, *args, **kwargs) orig_dialog = dialog toplevel = dialog.get_current_toplevel() add_current_toplevel(toplevel) if _fullscreen is not None: toplevel.set_position(Gtk.WindowPosition.CENTER) elif parent and isinstance(parent, Gtk.Window) and parent.props.visible: toplevel.set_transient_for(parent) toplevel.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) else: if parent: toplevel.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) else: toplevel.set_position(Gtk.WindowPosition.CENTER) # FIXME: This should not be necessary, but gnome shell hides window # decorations for HINT_DIALOG. We should study what dialogs should # have HINT_NORMAL (with window decorations) and what can have # HINT_DIALOG toplevel.set_type_hint(Gdk.WindowTypeHint.NORMAL) log.info("%s: Opening" % dialog_name) if hasattr(parent, 'on_dialog__opened'): parent.on_dialog__opened(orig_dialog) retval = run_dialog_internal(dialog, parent, toplevel) _pop_current_toplevel() return retval