| OLD | NEW | 
|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/gtk/apps/native_app_window_gtk.h" | 5 #include "chrome/browser/ui/gtk/apps/native_app_window_gtk.h" | 
| 6 | 6 | 
| 7 #include <gdk/gdkx.h> | 7 #include <gdk/gdkx.h> | 
| 8 #include <vector> | 8 #include <vector> | 
| 9 | 9 | 
| 10 #include "base/message_loop/message_pump_gtk.h" | 10 #include "base/message_loop/message_pump_gtk.h" | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 41 } // namespace | 41 } // namespace | 
| 42 | 42 | 
| 43 NativeAppWindowGtk::NativeAppWindowGtk(ShellWindow* shell_window, | 43 NativeAppWindowGtk::NativeAppWindowGtk(ShellWindow* shell_window, | 
| 44                                        const ShellWindow::CreateParams& params) | 44                                        const ShellWindow::CreateParams& params) | 
| 45     : shell_window_(shell_window), | 45     : shell_window_(shell_window), | 
| 46       window_(NULL), | 46       window_(NULL), | 
| 47       state_(GDK_WINDOW_STATE_WITHDRAWN), | 47       state_(GDK_WINDOW_STATE_WITHDRAWN), | 
| 48       is_active_(false), | 48       is_active_(false), | 
| 49       content_thinks_its_fullscreen_(false), | 49       content_thinks_its_fullscreen_(false), | 
| 50       frameless_(params.frame == ShellWindow::FRAME_NONE), | 50       frameless_(params.frame == ShellWindow::FRAME_NONE), | 
|  | 51       always_on_top_(params.always_on_top), | 
| 51       frame_cursor_(NULL), | 52       frame_cursor_(NULL), | 
| 52       atom_cache_(base::MessagePumpGtk::GetDefaultXDisplay(), kAtomsToCache), | 53       atom_cache_(base::MessagePumpGtk::GetDefaultXDisplay(), kAtomsToCache), | 
| 53       is_x_event_listened_(false) { | 54       is_x_event_listened_(false) { | 
| 54   Observe(web_contents()); | 55   Observe(web_contents()); | 
| 55 | 56 | 
| 56   window_ = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); | 57   window_ = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); | 
| 57 | 58 | 
| 58   gfx::NativeView native_view = | 59   gfx::NativeView native_view = | 
| 59       web_contents()->GetView()->GetNativeView(); | 60       web_contents()->GetView()->GetNativeView(); | 
| 60   gtk_container_add(GTK_CONTAINER(window_), native_view); | 61   gtk_container_add(GTK_CONTAINER(window_), native_view); | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 84   // get our first configure-event | 85   // get our first configure-event | 
| 85   bounds_ = restored_bounds_ = params.bounds; | 86   bounds_ = restored_bounds_ = params.bounds; | 
| 86   gint x, y; | 87   gint x, y; | 
| 87   gtk_window_get_position(window_, &x, &y); | 88   gtk_window_get_position(window_, &x, &y); | 
| 88   bounds_.set_origin(gfx::Point(x, y)); | 89   bounds_.set_origin(gfx::Point(x, y)); | 
| 89 | 90 | 
| 90   // Hide titlebar when {frame: 'none'} specified on ShellWindow. | 91   // Hide titlebar when {frame: 'none'} specified on ShellWindow. | 
| 91   if (frameless_) | 92   if (frameless_) | 
| 92     gtk_window_set_decorated(window_, false); | 93     gtk_window_set_decorated(window_, false); | 
| 93 | 94 | 
|  | 95   if (always_on_top_) | 
|  | 96     gtk_window_set_keep_above(window_, TRUE); | 
|  | 97 | 
| 94   int min_width = params.minimum_size.width(); | 98   int min_width = params.minimum_size.width(); | 
| 95   int min_height = params.minimum_size.height(); | 99   int min_height = params.minimum_size.height(); | 
| 96   int max_width = params.maximum_size.width(); | 100   int max_width = params.maximum_size.width(); | 
| 97   int max_height = params.maximum_size.height(); | 101   int max_height = params.maximum_size.height(); | 
| 98   GdkGeometry hints; | 102   GdkGeometry hints; | 
| 99   int hints_mask = 0; | 103   int hints_mask = 0; | 
| 100   if (min_width || min_height) { | 104   if (min_width || min_height) { | 
| 101     hints.min_height = min_height; | 105     hints.min_height = min_height; | 
| 102     hints.min_width = min_width; | 106     hints.min_width = min_width; | 
| 103     hints_mask |= GDK_HINT_MIN_SIZE; | 107     hints_mask |= GDK_HINT_MIN_SIZE; | 
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 332   } | 336   } | 
| 333 | 337 | 
| 334   return GDK_FILTER_CONTINUE; | 338   return GDK_FILTER_CONTINUE; | 
| 335 } | 339 } | 
| 336 | 340 | 
| 337 void NativeAppWindowGtk::FlashFrame(bool flash) { | 341 void NativeAppWindowGtk::FlashFrame(bool flash) { | 
| 338   gtk_window_set_urgency_hint(window_, flash); | 342   gtk_window_set_urgency_hint(window_, flash); | 
| 339 } | 343 } | 
| 340 | 344 | 
| 341 bool NativeAppWindowGtk::IsAlwaysOnTop() const { | 345 bool NativeAppWindowGtk::IsAlwaysOnTop() const { | 
| 342   return false; | 346   return always_on_top_; | 
| 343 } | 347 } | 
| 344 | 348 | 
| 345 void NativeAppWindowGtk::RenderViewHostChanged( | 349 void NativeAppWindowGtk::RenderViewHostChanged( | 
| 346     content::RenderViewHost* old_host, | 350     content::RenderViewHost* old_host, | 
| 347     content::RenderViewHost* new_host) { | 351     content::RenderViewHost* new_host) { | 
| 348   web_contents()->GetView()->Focus(); | 352   web_contents()->GetView()->Focus(); | 
| 349 } | 353 } | 
| 350 | 354 | 
| 351 gfx::Insets NativeAppWindowGtk::GetFrameInsets() const { | 355 gfx::Insets NativeAppWindowGtk::GetFrameInsets() const { | 
| 352   if (frameless_) | 356   if (frameless_) | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 370   return gfx::Insets( | 374   return gfx::Insets( | 
| 371       top_inset, | 375       top_inset, | 
| 372       left_inset, | 376       left_inset, | 
| 373       rect_with_decorations.height - current_height - top_inset, | 377       rect_with_decorations.height - current_height - top_inset, | 
| 374       rect_with_decorations.width - current_width - left_inset); | 378       rect_with_decorations.width - current_width - left_inset); | 
| 375 } | 379 } | 
| 376 | 380 | 
| 377 void NativeAppWindowGtk::HideWithApp() {} | 381 void NativeAppWindowGtk::HideWithApp() {} | 
| 378 void NativeAppWindowGtk::ShowWithApp() {} | 382 void NativeAppWindowGtk::ShowWithApp() {} | 
| 379 | 383 | 
|  | 384 void NativeAppWindowGtk::SetAlwaysOnTop(bool always_on_top) { | 
|  | 385   if (always_on_top_ != always_on_top) { | 
|  | 386     // gdk_window_get_state() does not give us the correct value for the | 
|  | 387     // GDK_WINDOW_STATE_ABOVE bit. Cache the current state. | 
|  | 388     always_on_top_ = always_on_top; | 
|  | 389     gtk_window_set_keep_above(window_, always_on_top_ ? TRUE : FALSE); | 
|  | 390     shell_window_->OnNativeWindowChanged(); | 
|  | 391   } | 
|  | 392 } | 
|  | 393 | 
| 380 gfx::NativeView NativeAppWindowGtk::GetHostView() const { | 394 gfx::NativeView NativeAppWindowGtk::GetHostView() const { | 
| 381   NOTIMPLEMENTED(); | 395   NOTIMPLEMENTED(); | 
| 382   return NULL; | 396   return NULL; | 
| 383 } | 397 } | 
| 384 | 398 | 
| 385 gfx::Point NativeAppWindowGtk::GetDialogPosition(const gfx::Size& size) { | 399 gfx::Point NativeAppWindowGtk::GetDialogPosition(const gfx::Size& size) { | 
| 386   gint current_width = 0; | 400   gint current_width = 0; | 
| 387   gint current_height = 0; | 401   gint current_height = 0; | 
| 388   gtk_window_get_size(window_, ¤t_width, ¤t_height); | 402   gtk_window_get_size(window_, ¤t_width, ¤t_height); | 
| 389   return gfx::Point(current_width / 2 - size.width() / 2, | 403   return gfx::Point(current_width / 2 - size.width() / 2, | 
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 638 } | 652 } | 
| 639 | 653 | 
| 640 void NativeAppWindowGtk::UpdateDraggableRegions( | 654 void NativeAppWindowGtk::UpdateDraggableRegions( | 
| 641     const std::vector<extensions::DraggableRegion>& regions) { | 655     const std::vector<extensions::DraggableRegion>& regions) { | 
| 642   // Draggable region is not supported for non-frameless window. | 656   // Draggable region is not supported for non-frameless window. | 
| 643   if (!frameless_) | 657   if (!frameless_) | 
| 644     return; | 658     return; | 
| 645 | 659 | 
| 646   draggable_region_.reset(ShellWindow::RawDraggableRegionsToSkRegion(regions)); | 660   draggable_region_.reset(ShellWindow::RawDraggableRegionsToSkRegion(regions)); | 
| 647 } | 661 } | 
| OLD | NEW | 
|---|