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

Side by Side Diff: chrome/browser/ui/libgtk2ui/gtk2_util.cc

Issue 283303002: Fixes the crash when the transient parent is NULL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/libgtk2ui/gtk2_util.h" 5 #include "chrome/browser/ui/libgtk2ui/gtk2_util.h"
6 6
7 #include <gdk/gdk.h> 7 #include <gdk/gdk.h>
8 #include <gdk/gdkx.h> 8 #include <gdk/gdkx.h>
9 #include <gtk/gtk.h> 9 #include <gtk/gtk.h>
10 10
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 flags |= (state & GDK_CONTROL_MASK) ? ui::EF_CONTROL_DOWN : ui::EF_NONE; 96 flags |= (state & GDK_CONTROL_MASK) ? ui::EF_CONTROL_DOWN : ui::EF_NONE;
97 flags |= (state & GDK_SHIFT_MASK) ? ui::EF_SHIFT_DOWN : ui::EF_NONE; 97 flags |= (state & GDK_SHIFT_MASK) ? ui::EF_SHIFT_DOWN : ui::EF_NONE;
98 flags |= (state & GDK_MOD1_MASK) ? ui::EF_ALT_DOWN : ui::EF_NONE; 98 flags |= (state & GDK_MOD1_MASK) ? ui::EF_ALT_DOWN : ui::EF_NONE;
99 flags |= (state & GDK_BUTTON1_MASK) ? ui::EF_LEFT_MOUSE_BUTTON : ui::EF_NONE; 99 flags |= (state & GDK_BUTTON1_MASK) ? ui::EF_LEFT_MOUSE_BUTTON : ui::EF_NONE;
100 flags |= 100 flags |=
101 (state & GDK_BUTTON2_MASK) ? ui::EF_MIDDLE_MOUSE_BUTTON : ui::EF_NONE; 101 (state & GDK_BUTTON2_MASK) ? ui::EF_MIDDLE_MOUSE_BUTTON : ui::EF_NONE;
102 flags |= (state & GDK_BUTTON3_MASK) ? ui::EF_RIGHT_MOUSE_BUTTON : ui::EF_NONE; 102 flags |= (state & GDK_BUTTON3_MASK) ? ui::EF_RIGHT_MOUSE_BUTTON : ui::EF_NONE;
103 return flags; 103 return flags;
104 } 104 }
105 105
106 // Set |dialog| as transient for |parent|, which will keep it on top and center
107 // it above |parent|.
108 void SetGtkTransientForAura(GtkWidget* dialog, aura::Window* parent) { 106 void SetGtkTransientForAura(GtkWidget* dialog, aura::Window* parent) {
107 if (!parent)
108 return;
109
109 gtk_widget_realize(dialog); 110 gtk_widget_realize(dialog);
110 GdkWindow* gdk_window = gtk_widget_get_window(dialog); 111 GdkWindow* gdk_window = gtk_widget_get_window(dialog);
111 112
112 // TODO(erg): Check to make sure we're using X11 if wayland or some other 113 // TODO(erg): Check to make sure we're using X11 if wayland or some other
113 // display server ever happens. Otherwise, this will crash. 114 // display server ever happens. Otherwise, this will crash.
114 XSetTransientForHint(GDK_WINDOW_XDISPLAY(gdk_window), 115 XSetTransientForHint(GDK_WINDOW_XDISPLAY(gdk_window),
115 GDK_WINDOW_XID(gdk_window), 116 GDK_WINDOW_XID(gdk_window),
116 parent->GetHost()->GetAcceleratedWidget()); 117 parent->GetHost()->GetAcceleratedWidget());
117 118
118 // We also set the |parent| as a property of |dialog|, so that we can unlink 119 // We also set the |parent| as a property of |dialog|, so that we can unlink
119 // the two later. 120 // the two later.
120 g_object_set_data(G_OBJECT(dialog), kAuraTransientParent, parent); 121 g_object_set_data(G_OBJECT(dialog), kAuraTransientParent, parent);
121 } 122 }
122 123
123 aura::Window* GetAuraTransientParent(GtkWidget* dialog) { 124 aura::Window* GetAuraTransientParent(GtkWidget* dialog) {
124 return reinterpret_cast<aura::Window*>( 125 return reinterpret_cast<aura::Window*>(
125 g_object_get_data(G_OBJECT(dialog), kAuraTransientParent)); 126 g_object_get_data(G_OBJECT(dialog), kAuraTransientParent));
126 } 127 }
127 128
128 void ClearAuraTransientParent(GtkWidget* dialog) { 129 void ClearAuraTransientParent(GtkWidget* dialog) {
129 g_object_set_data(G_OBJECT(dialog), kAuraTransientParent, NULL); 130 g_object_set_data(G_OBJECT(dialog), kAuraTransientParent, NULL);
130 } 131 }
131 132
132 } // namespace libgtk2ui 133 } // namespace libgtk2ui
OLDNEW
« no previous file with comments | « chrome/browser/ui/libgtk2ui/gtk2_util.h ('k') | chrome/browser/ui/libgtk2ui/print_dialog_gtk2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698