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

Side by Side Diff: plugin/linux/main_linux.cc

Issue 6348018: Add HANDLE_CRASHES to Linux callback functions, since they are plugin entry p... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 9 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 | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 if (!obj->draw_) return; 70 if (!obj->draw_) return;
71 // Don't allow re-entrant rendering (can happen in Chrome) 71 // Don't allow re-entrant rendering (can happen in Chrome)
72 if (obj->client()->IsRendering()) return; 72 if (obj->client()->IsRendering()) return;
73 obj->client()->RenderClient(true); 73 obj->client()->RenderClient(true);
74 obj->draw_ = false; 74 obj->draw_ = false;
75 } 75 }
76 76
77 // Xt support functions 77 // Xt support functions
78 78
79 void LinuxTimer(XtPointer data, XtIntervalId* id) { 79 void LinuxTimer(XtPointer data, XtIntervalId* id) {
80 HANDLE_CRASHES;
80 PluginObject *obj = static_cast<PluginObject *>(data); 81 PluginObject *obj = static_cast<PluginObject *>(data);
81 DCHECK(obj->xt_interval_ == *id); 82 DCHECK(obj->xt_interval_ == *id);
82 obj->client()->Tick(); 83 obj->client()->Tick();
83 obj->draw_ = true; 84 obj->draw_ = true;
84 if (obj->renderer()) { 85 if (obj->renderer()) {
85 if (obj->client()->NeedsRender()) { 86 if (obj->client()->NeedsRender()) {
86 // NOTE: this draws no matter what instead of just invalidating the 87 // NOTE: this draws no matter what instead of just invalidating the
87 // region, which means it will execute even if the plug-in window is 88 // region, which means it will execute even if the plug-in window is
88 // invisible. 89 // invisible.
89 DrawPlugin(obj); 90 DrawPlugin(obj);
90 } 91 }
91 } 92 }
92 obj->xt_interval_ = 93 obj->xt_interval_ =
93 XtAppAddTimeOut(obj->xt_app_context_, 8, LinuxTimer, obj); 94 XtAppAddTimeOut(obj->xt_app_context_, 8, LinuxTimer, obj);
94 } 95 }
95 96
96 void LinuxExposeHandler(Widget w, 97 void LinuxExposeHandler(Widget w,
97 XtPointer user_data, 98 XtPointer user_data,
98 XEvent *event, 99 XEvent *event,
99 Boolean *cont) { 100 Boolean *cont) {
101 HANDLE_CRASHES;
100 PluginObject *obj = static_cast<PluginObject *>(user_data); 102 PluginObject *obj = static_cast<PluginObject *>(user_data);
101 if (event->type != Expose) return; 103 if (event->type != Expose) return;
102 DrawPlugin(obj); 104 DrawPlugin(obj);
103 } 105 }
104 106
105 static int KeySymToDOMKeyCode(KeySym key_sym) { 107 static int KeySymToDOMKeyCode(KeySym key_sym) {
106 // See https://developer.mozilla.org/en/DOM/Event/UIEvent/KeyEvent for the 108 // See https://developer.mozilla.org/en/DOM/Event/UIEvent/KeyEvent for the
107 // DOM values. 109 // DOM values.
108 // X keycodes are not useful, because they describe the geometry, not the 110 // X keycodes are not useful, because they describe the geometry, not the
109 // associated symbol, so a 'Q' on a QWERTY (US) keyboard has the same keycode 111 // associated symbol, so a 'Q' on a QWERTY (US) keyboard has the same keycode
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 if (x_state & Mod2Mask) { 247 if (x_state & Mod2Mask) {
246 modifier_state |= Event::MODIFIER_META; 248 modifier_state |= Event::MODIFIER_META;
247 } 249 }
248 return modifier_state; 250 return modifier_state;
249 } 251 }
250 252
251 void LinuxKeyHandler(Widget w, 253 void LinuxKeyHandler(Widget w,
252 XtPointer user_data, 254 XtPointer user_data,
253 XEvent *xevent, 255 XEvent *xevent,
254 Boolean *cont) { 256 Boolean *cont) {
257 HANDLE_CRASHES;
255 PluginObject *obj = static_cast<PluginObject *>(user_data); 258 PluginObject *obj = static_cast<PluginObject *>(user_data);
256 XKeyEvent *key_event = &xevent->xkey; 259 XKeyEvent *key_event = &xevent->xkey;
257 Event::Type type; 260 Event::Type type;
258 switch (xevent->type) { 261 switch (xevent->type) {
259 case KeyPress: 262 case KeyPress:
260 type = Event::TYPE_KEYDOWN; 263 type = Event::TYPE_KEYDOWN;
261 break; 264 break;
262 case KeyRelease: 265 case KeyRelease:
263 type = Event::TYPE_KEYUP; 266 type = Event::TYPE_KEYUP;
264 break; 267 break;
(...skipping 19 matching lines...) Expand all
284 287
285 // TODO: Any way to query the system for the correct value ? According to 288 // TODO: Any way to query the system for the correct value ? According to
286 // http://library.gnome.org/devel/gdk/stable/gdk-Event-Structures.html GTK uses 289 // http://library.gnome.org/devel/gdk/stable/gdk-Event-Structures.html GTK uses
287 // 250ms. 290 // 250ms.
288 const unsigned int kDoubleClickTime = 250; // in ms 291 const unsigned int kDoubleClickTime = 250; // in ms
289 292
290 void LinuxMouseButtonHandler(Widget w, 293 void LinuxMouseButtonHandler(Widget w,
291 XtPointer user_data, 294 XtPointer user_data,
292 XEvent *xevent, 295 XEvent *xevent,
293 Boolean *cont) { 296 Boolean *cont) {
297 HANDLE_CRASHES;
294 PluginObject *obj = static_cast<PluginObject *>(user_data); 298 PluginObject *obj = static_cast<PluginObject *>(user_data);
295 XButtonEvent *button_event = &xevent->xbutton; 299 XButtonEvent *button_event = &xevent->xbutton;
296 Event::Type type; 300 Event::Type type;
297 switch (xevent->type) { 301 switch (xevent->type) {
298 case ButtonPress: 302 case ButtonPress:
299 type = Event::TYPE_MOUSEDOWN; 303 type = Event::TYPE_MOUSEDOWN;
300 break; 304 break;
301 case ButtonRelease: 305 case ButtonRelease:
302 type = Event::TYPE_MOUSEUP; 306 type = Event::TYPE_MOUSEUP;
303 break; 307 break;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 } else { 346 } else {
343 obj->set_last_click_time(button_event->time); 347 obj->set_last_click_time(button_event->time);
344 } 348 }
345 } 349 }
346 } 350 }
347 351
348 void LinuxMouseMoveHandler(Widget w, 352 void LinuxMouseMoveHandler(Widget w,
349 XtPointer user_data, 353 XtPointer user_data,
350 XEvent *xevent, 354 XEvent *xevent,
351 Boolean *cont) { 355 Boolean *cont) {
356 HANDLE_CRASHES;
352 PluginObject *obj = static_cast<PluginObject *>(user_data); 357 PluginObject *obj = static_cast<PluginObject *>(user_data);
353 if (xevent->type != MotionNotify) 358 if (xevent->type != MotionNotify)
354 return; 359 return;
355 XMotionEvent *motion_event = &xevent->xmotion; 360 XMotionEvent *motion_event = &xevent->xmotion;
356 Event event(Event::TYPE_MOUSEMOVE); 361 Event event(Event::TYPE_MOUSEMOVE);
357 int modifier_state = GetXModifierState(motion_event->state); 362 int modifier_state = GetXModifierState(motion_event->state);
358 event.set_modifier_state(modifier_state); 363 event.set_modifier_state(modifier_state);
359 event.set_position(motion_event->x, motion_event->y, 364 event.set_position(motion_event->x, motion_event->y,
360 motion_event->x_root, motion_event->y_root, 365 motion_event->x_root, motion_event->y_root,
361 obj->in_plugin()); 366 obj->in_plugin());
362 obj->client()->AddEventToQueue(event); 367 obj->client()->AddEventToQueue(event);
363 } 368 }
364 369
365 void LinuxEnterLeaveHandler(Widget w, 370 void LinuxEnterLeaveHandler(Widget w,
366 XtPointer user_data, 371 XtPointer user_data,
367 XEvent *xevent, 372 XEvent *xevent,
368 Boolean *cont) { 373 Boolean *cont) {
374 HANDLE_CRASHES;
369 PluginObject *obj = static_cast<PluginObject *>(user_data); 375 PluginObject *obj = static_cast<PluginObject *>(user_data);
370 switch (xevent->type) { 376 switch (xevent->type) {
371 case EnterNotify: 377 case EnterNotify:
372 obj->set_in_plugin(true); 378 obj->set_in_plugin(true);
373 break; 379 break;
374 case LeaveNotify: 380 case LeaveNotify:
375 obj->set_in_plugin(false); 381 obj->set_in_plugin(false);
376 break; 382 break;
377 default: 383 default:
378 return; 384 return;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 static_cast<int>(scroll_event->x_root), 552 static_cast<int>(scroll_event->x_root),
547 static_cast<int>(scroll_event->y_root), 553 static_cast<int>(scroll_event->y_root),
548 obj->in_plugin()); 554 obj->in_plugin());
549 obj->client()->AddEventToQueue(event); 555 obj->client()->AddEventToQueue(event);
550 return TRUE; 556 return TRUE;
551 } 557 }
552 558
553 static gboolean GtkEventCallback(GtkWidget *widget, 559 static gboolean GtkEventCallback(GtkWidget *widget,
554 GdkEvent *event, 560 GdkEvent *event,
555 gpointer user_data) { 561 gpointer user_data) {
562 HANDLE_CRASHES;
556 PluginObject *obj = static_cast<PluginObject *>(user_data); 563 PluginObject *obj = static_cast<PluginObject *>(user_data);
557 DLOG_ASSERT(widget == obj->gtk_event_source_); 564 DLOG_ASSERT(widget == obj->gtk_event_source_);
558 switch (event->type) { 565 switch (event->type) {
559 case GDK_EXPOSE: 566 case GDK_EXPOSE:
560 if (GTK_WIDGET_DRAWABLE(widget)) { 567 if (GTK_WIDGET_DRAWABLE(widget)) {
561 obj->draw_ = true; 568 obj->draw_ = true;
562 DrawPlugin(obj); 569 DrawPlugin(obj);
563 } 570 }
564 return TRUE; 571 return TRUE;
565 case GDK_ENTER_NOTIFY: 572 case GDK_ENTER_NOTIFY:
(...skipping 14 matching lines...) Expand all
580 case GDK_SCROLL: 587 case GDK_SCROLL:
581 return GtkHandleScroll(widget, &event->scroll, obj); 588 return GtkHandleScroll(widget, &event->scroll, obj);
582 default: 589 default:
583 return FALSE; 590 return FALSE;
584 } 591 }
585 } 592 }
586 593
587 static gboolean GtkConfigureEventCallback(GtkWidget *widget, 594 static gboolean GtkConfigureEventCallback(GtkWidget *widget,
588 GdkEventConfigure *configure_event, 595 GdkEventConfigure *configure_event,
589 gpointer user_data) { 596 gpointer user_data) {
597 HANDLE_CRASHES;
590 PluginObject *obj = static_cast<PluginObject *>(user_data); 598 PluginObject *obj = static_cast<PluginObject *>(user_data);
591 return obj->OnGtkConfigure(widget, configure_event); 599 return obj->OnGtkConfigure(widget, configure_event);
592 } 600 }
593 601
594 static gboolean GtkDeleteEventCallback(GtkWidget *widget, 602 static gboolean GtkDeleteEventCallback(GtkWidget *widget,
595 GdkEvent *event, 603 GdkEvent *event,
596 gpointer user_data) { 604 gpointer user_data) {
605 HANDLE_CRASHES;
597 PluginObject *obj = static_cast<PluginObject *>(user_data); 606 PluginObject *obj = static_cast<PluginObject *>(user_data);
598 return obj->OnGtkDelete(widget, event); 607 return obj->OnGtkDelete(widget, event);
599 } 608 }
600 609
601 static gboolean GtkTimeoutCallback(gpointer user_data) { 610 static gboolean GtkTimeoutCallback(gpointer user_data) {
611 HANDLE_CRASHES;
602 PluginObject *obj = static_cast<PluginObject *>(user_data); 612 PluginObject *obj = static_cast<PluginObject *>(user_data);
603 obj->draw_ = true; 613 obj->draw_ = true;
604 obj->client()->Tick(); 614 obj->client()->Tick();
605 if (obj->renderer()) { 615 if (obj->renderer()) {
606 if (obj->client()->NeedsRender()) { 616 if (obj->client()->NeedsRender()) {
607 GtkWidget *widget; 617 GtkWidget *widget;
608 if (obj->fullscreen()) { 618 if (obj->fullscreen()) {
609 widget = obj->gtk_fullscreen_container_; 619 widget = obj->gtk_fullscreen_container_;
610 } else { 620 } else {
611 widget = obj->gtk_container_; 621 widget = obj->gtk_container_;
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 client()->SendResizeEvent(renderer()->width(), renderer()->height(), 962 client()->SendResizeEvent(renderer()->width(), renderer()->height(),
953 false); 963 false);
954 SetGtkEventSource(gtk_container_); 964 SetGtkEventSource(gtk_container_);
955 gtk_widget_destroy(gtk_fullscreen_container_); 965 gtk_widget_destroy(gtk_fullscreen_container_);
956 gtk_fullscreen_container_ = NULL; 966 gtk_fullscreen_container_ = NULL;
957 fullscreen_window_ = 0; 967 fullscreen_window_ = 0;
958 fullscreen_ = false; 968 fullscreen_ = false;
959 } 969 }
960 } // namespace _o3d 970 } // namespace _o3d
961 } // namespace glue 971 } // namespace glue
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698