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

Side by Side Diff: chrome/browser/ui/gtk/bubble/bubble_gtk.cc

Issue 9167002: Revert 116956 - GTK: Seal up GSEALs, focusing on GtkSelectionData. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 11 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
« no previous file with comments | « no previous file | chrome/browser/ui/gtk/certificate_viewer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/bubble/bubble_gtk.h" 5 #include "chrome/browser/ui/gtk/bubble/bubble_gtk.h"
6 6
7 #include <gdk/gdkkeysyms.h> 7 #include <gdk/gdkkeysyms.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "chrome/browser/ui/gtk/bubble/bubble_accelerators_gtk.h" 10 #include "chrome/browser/ui/gtk/bubble/bubble_accelerators_gtk.h"
11 #include "chrome/browser/ui/gtk/gtk_theme_service.h" 11 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 mask_region_ = NULL; 300 mask_region_ = NULL;
301 } 301 }
302 GtkAllocation allocation; 302 GtkAllocation allocation;
303 gtk_widget_get_allocation(window_, &allocation); 303 gtk_widget_get_allocation(window_, &allocation);
304 std::vector<GdkPoint> points = MakeFramePolygonPoints( 304 std::vector<GdkPoint> points = MakeFramePolygonPoints(
305 current_arrow_location_, allocation.width, allocation.height, 305 current_arrow_location_, allocation.width, allocation.height,
306 FRAME_MASK); 306 FRAME_MASK);
307 mask_region_ = gdk_region_polygon(&points[0], 307 mask_region_ = gdk_region_polygon(&points[0],
308 points.size(), 308 points.size(),
309 GDK_EVEN_ODD_RULE); 309 GDK_EVEN_ODD_RULE);
310 310 gdk_window_shape_combine_region(window_->window, NULL, 0, 0);
311 GdkWindow* gdk_window = gtk_widget_get_window(window_); 311 gdk_window_shape_combine_region(window_->window, mask_region_, 0, 0);
312 gdk_window_shape_combine_region(gdk_window, NULL, 0, 0);
313 gdk_window_shape_combine_region(gdk_window, mask_region_, 0, 0);
314 } 312 }
315 313
316 void BubbleGtk::MoveWindow() { 314 void BubbleGtk::MoveWindow() {
317 if (!toplevel_window_ || !anchor_widget_) 315 if (!toplevel_window_ || !anchor_widget_)
318 return; 316 return;
319 317
320 gint toplevel_x = 0, toplevel_y = 0; 318 gint toplevel_x = 0, toplevel_y = 0;
321 gdk_window_get_position(gtk_widget_get_window(toplevel_window_), 319 gdk_window_get_position(gtk_widget_get_window(toplevel_window_),
322 &toplevel_x, &toplevel_y); 320 &toplevel_x, &toplevel_y);
323 321
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 366
369 void BubbleGtk::Close() { 367 void BubbleGtk::Close() {
370 // We don't need to ungrab the pointer or keyboard here; the X server will 368 // We don't need to ungrab the pointer or keyboard here; the X server will
371 // automatically do that when we destroy our window. 369 // automatically do that when we destroy our window.
372 DCHECK(window_); 370 DCHECK(window_);
373 gtk_widget_destroy(window_); 371 gtk_widget_destroy(window_);
374 // |this| has been deleted, see OnDestroy. 372 // |this| has been deleted, see OnDestroy.
375 } 373 }
376 374
377 void BubbleGtk::GrabPointerAndKeyboard() { 375 void BubbleGtk::GrabPointerAndKeyboard() {
378 GdkWindow* gdk_window = gtk_widget_get_window(window_);
379
380 // Install X pointer and keyboard grabs to make sure that we have the focus 376 // Install X pointer and keyboard grabs to make sure that we have the focus
381 // and get all mouse and keyboard events until we're closed. 377 // and get all mouse and keyboard events until we're closed.
382 GdkGrabStatus pointer_grab_status = 378 GdkGrabStatus pointer_grab_status =
383 gdk_pointer_grab(gdk_window, 379 gdk_pointer_grab(window_->window,
384 TRUE, // owner_events 380 TRUE, // owner_events
385 GDK_BUTTON_PRESS_MASK, // event_mask 381 GDK_BUTTON_PRESS_MASK, // event_mask
386 NULL, // confine_to 382 NULL, // confine_to
387 NULL, // cursor 383 NULL, // cursor
388 GDK_CURRENT_TIME); 384 GDK_CURRENT_TIME);
389 if (pointer_grab_status != GDK_GRAB_SUCCESS) { 385 if (pointer_grab_status != GDK_GRAB_SUCCESS) {
390 // This will fail if someone else already has the pointer grabbed, but 386 // This will fail if someone else already has the pointer grabbed, but
391 // there's not really anything we can do about that. 387 // there's not really anything we can do about that.
392 DLOG(ERROR) << "Unable to grab pointer (status=" 388 DLOG(ERROR) << "Unable to grab pointer (status="
393 << pointer_grab_status << ")"; 389 << pointer_grab_status << ")";
394 } 390 }
395 GdkGrabStatus keyboard_grab_status = 391 GdkGrabStatus keyboard_grab_status =
396 gdk_keyboard_grab(gdk_window, 392 gdk_keyboard_grab(window_->window,
397 FALSE, // owner_events 393 FALSE, // owner_events
398 GDK_CURRENT_TIME); 394 GDK_CURRENT_TIME);
399 if (keyboard_grab_status != GDK_GRAB_SUCCESS) { 395 if (keyboard_grab_status != GDK_GRAB_SUCCESS) {
400 DLOG(ERROR) << "Unable to grab keyboard (status=" 396 DLOG(ERROR) << "Unable to grab keyboard (status="
401 << keyboard_grab_status << ")"; 397 << keyboard_grab_status << ")";
402 } 398 }
403 } 399 }
404 400
405 gboolean BubbleGtk::OnGtkAccelerator(GtkAccelGroup* group, 401 gboolean BubbleGtk::OnGtkAccelerator(GtkAccelGroup* group,
406 GObject* acceleratable, 402 GObject* acceleratable,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 } 449 }
454 break; 450 break;
455 default: 451 default:
456 return FALSE; 452 return FALSE;
457 } 453 }
458 454
459 return TRUE; 455 return TRUE;
460 } 456 }
461 457
462 gboolean BubbleGtk::OnExpose(GtkWidget* widget, GdkEventExpose* expose) { 458 gboolean BubbleGtk::OnExpose(GtkWidget* widget, GdkEventExpose* expose) {
463 // TODO(erg): This whole method will need to be rewritten in cairo.
464 GdkDrawable* drawable = GDK_DRAWABLE(window_->window); 459 GdkDrawable* drawable = GDK_DRAWABLE(window_->window);
465 GdkGC* gc = gdk_gc_new(drawable); 460 GdkGC* gc = gdk_gc_new(drawable);
466 gdk_gc_set_rgb_fg_color(gc, &kFrameColor); 461 gdk_gc_set_rgb_fg_color(gc, &kFrameColor);
467 462
468 // Stroke the frame border. 463 // Stroke the frame border.
469 GtkAllocation allocation; 464 GtkAllocation allocation;
470 gtk_widget_get_allocation(window_, &allocation); 465 gtk_widget_get_allocation(window_, &allocation);
471 std::vector<GdkPoint> points = MakeFramePolygonPoints( 466 std::vector<GdkPoint> points = MakeFramePolygonPoints(
472 current_arrow_location_, allocation.width, allocation.height, 467 current_arrow_location_, allocation.width, allocation.height,
473 FRAME_STROKE); 468 FRAME_STROKE);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 gboolean BubbleGtk::OnToplevelUnmap(GtkWidget* widget, GdkEvent* event) { 532 gboolean BubbleGtk::OnToplevelUnmap(GtkWidget* widget, GdkEvent* event) {
538 Close(); 533 Close();
539 return FALSE; 534 return FALSE;
540 } 535 }
541 536
542 void BubbleGtk::OnAnchorAllocate(GtkWidget* widget, 537 void BubbleGtk::OnAnchorAllocate(GtkWidget* widget,
543 GtkAllocation* allocation) { 538 GtkAllocation* allocation) {
544 if (!UpdateArrowLocation(false)) 539 if (!UpdateArrowLocation(false))
545 MoveWindow(); 540 MoveWindow();
546 } 541 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/gtk/certificate_viewer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698