Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1362)

Unified Diff: chrome/browser/ui/libgtk2ui/gtk2_util.cc

Issue 221813010: Sets transient for PrintDialogGtk2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/libgtk2ui/gtk2_util.h ('k') | chrome/browser/ui/libgtk2ui/print_dialog_gtk2.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/libgtk2ui/gtk2_util.cc
diff --git a/chrome/browser/ui/libgtk2ui/gtk2_util.cc b/chrome/browser/ui/libgtk2ui/gtk2_util.cc
index d057a2ee86e7d1d0545625325f59c695889ad660..a2c1e6c801a7e1ff6a15e13b446c17ab090d7aa9 100644
--- a/chrome/browser/ui/libgtk2ui/gtk2_util.cc
+++ b/chrome/browser/ui/libgtk2ui/gtk2_util.cc
@@ -4,11 +4,15 @@
#include "chrome/browser/ui/libgtk2ui/gtk2_util.h"
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include "base/command_line.h"
#include "base/environment.h"
#include "base/memory/scoped_ptr.h"
+#include "ui/aura/window.h"
+#include "ui/aura/window_tree_host.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/keyboard_code_conversion_x.h"
@@ -16,6 +20,8 @@
namespace {
+const char kAuraTransientParent[] = "aura-transient-parent";
+
void CommonInitFromCommandLine(const CommandLine& command_line,
void (*init_func)(gint*, gchar***)) {
const std::vector<std::string>& args = command_line.argv();
@@ -97,4 +103,30 @@ int EventFlagsFromGdkState(guint state) {
return flags;
}
+// Set |dialog| as transient for |parent|, which will keep it on top and center
+// it above |parent|.
+void SetGtkTransientForAura(GtkWidget* dialog, aura::Window* parent) {
+ gtk_widget_realize(dialog);
+ GdkWindow* gdk_window = gtk_widget_get_window(dialog);
+
+ // TODO(erg): Check to make sure we're using X11 if wayland or some other
+ // display server ever happens. Otherwise, this will crash.
+ XSetTransientForHint(GDK_WINDOW_XDISPLAY(gdk_window),
+ GDK_WINDOW_XID(gdk_window),
+ parent->GetHost()->GetAcceleratedWidget());
+
+ // We also set the |parent| as a property of |dialog|, so that we can unlink
+ // the two later.
+ g_object_set_data(G_OBJECT(dialog), kAuraTransientParent, parent);
+}
+
+aura::Window* GetAuraTransientParent(GtkWidget* dialog) {
+ return reinterpret_cast<aura::Window*>(
+ g_object_get_data(G_OBJECT(dialog), kAuraTransientParent));
+}
+
+void ClearAuraTransientParent(GtkWidget* dialog) {
+ g_object_set_data(G_OBJECT(dialog), kAuraTransientParent, NULL);
+}
+
} // namespace libgtk2ui
« no previous file with comments | « chrome/browser/ui/libgtk2ui/gtk2_util.h ('k') | chrome/browser/ui/libgtk2ui/print_dialog_gtk2.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698