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

Side by Side Diff: base/message_pump_glib.cc

Issue 4007004: Revert 63397 - Add a message pump for touchui=1... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 2 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 | « base/message_pump_glib.h ('k') | base/message_pump_glib_x.h » ('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) 2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2008 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 "base/message_pump_glib.h" 5 #include "base/message_pump_glib.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <math.h> 8 #include <math.h>
9 9
10 #include <gtk/gtk.h> 10 #include <gtk/gtk.h>
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // first iteration of the loop, so RunAllPending() works correctly. 200 // first iteration of the loop, so RunAllPending() works correctly.
201 bool more_work_is_plausible = true; 201 bool more_work_is_plausible = true;
202 202
203 // We run our own loop instead of using g_main_loop_quit in one of the 203 // We run our own loop instead of using g_main_loop_quit in one of the
204 // callbacks. This is so we only quit our own loops, and we don't quit 204 // callbacks. This is so we only quit our own loops, and we don't quit
205 // nested loops run by others. TODO(deanm): Is this what we want? 205 // nested loops run by others. TODO(deanm): Is this what we want?
206 for (;;) { 206 for (;;) {
207 // Don't block if we think we have more work to do. 207 // Don't block if we think we have more work to do.
208 bool block = !more_work_is_plausible; 208 bool block = !more_work_is_plausible;
209 209
210 more_work_is_plausible = RunOnce(context_, block); 210 // g_main_context_iteration returns true if events have been dispatched.
211 more_work_is_plausible = g_main_context_iteration(context_, block);
211 if (state_->should_quit) 212 if (state_->should_quit)
212 break; 213 break;
213 214
214 more_work_is_plausible |= state_->delegate->DoWork(); 215 more_work_is_plausible |= state_->delegate->DoWork();
215 if (state_->should_quit) 216 if (state_->should_quit)
216 break; 217 break;
217 218
218 more_work_is_plausible |= 219 more_work_is_plausible |=
219 state_->delegate->DoDelayedWork(&delayed_work_time_); 220 state_->delegate->DoDelayedWork(&delayed_work_time_);
220 if (state_->should_quit) 221 if (state_->should_quit)
221 break; 222 break;
222 223
223 if (more_work_is_plausible) 224 if (more_work_is_plausible)
224 continue; 225 continue;
225 226
226 more_work_is_plausible = state_->delegate->DoIdleWork(); 227 more_work_is_plausible = state_->delegate->DoIdleWork();
227 if (state_->should_quit) 228 if (state_->should_quit)
228 break; 229 break;
229 } 230 }
230 231
231 state_ = previous_state; 232 state_ = previous_state;
232 } 233 }
233 234
234 bool MessagePumpForUI::RunOnce(GMainContext* context, bool block) {
235 // g_main_context_iteration returns true if events have been dispatched.
236 return g_main_context_iteration(context, block);
237 }
238
239 // Return the timeout we want passed to poll. 235 // Return the timeout we want passed to poll.
240 int MessagePumpForUI::HandlePrepare() { 236 int MessagePumpForUI::HandlePrepare() {
241 // We know we have work, but we haven't called HandleDispatch yet. Don't let 237 // We know we have work, but we haven't called HandleDispatch yet. Don't let
242 // the pump block so that we can do some processing. 238 // the pump block so that we can do some processing.
243 if (state_ && // state_ may be null during tests. 239 if (state_ && // state_ may be null during tests.
244 state_->has_work) 240 state_->has_work)
245 return 0; 241 return 0;
246 242
247 // We don't think we have work to do, but make sure not to block 243 // We don't think we have work to do, but make sure not to block
248 // longer than the next time we need to run delayed work. 244 // longer than the next time we need to run delayed work.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 } 325 }
330 } 326 }
331 327
332 void MessagePumpForUI::ScheduleDelayedWork(const Time& delayed_work_time) { 328 void MessagePumpForUI::ScheduleDelayedWork(const Time& delayed_work_time) {
333 // We need to wake up the loop in case the poll timeout needs to be 329 // We need to wake up the loop in case the poll timeout needs to be
334 // adjusted. This will cause us to try to do work, but that's ok. 330 // adjusted. This will cause us to try to do work, but that's ok.
335 delayed_work_time_ = delayed_work_time; 331 delayed_work_time_ = delayed_work_time;
336 ScheduleWork(); 332 ScheduleWork();
337 } 333 }
338 334
339 void MessagePumpForUI::DispatchEvents(GdkEvent* event) {
340 WillProcessEvent(event);
341 if (state_ && state_->dispatcher) { // state_ may be null during tests.
342 if (!state_->dispatcher->Dispatch(event))
343 state_->should_quit = true;
344 } else {
345 gtk_main_do_event(event);
346 }
347 DidProcessEvent(event);
348 }
349
350 // static 335 // static
351 void MessagePumpForUI::EventDispatcher(GdkEvent* event, gpointer data) { 336 void MessagePumpForUI::EventDispatcher(GdkEvent* event, gpointer data) {
352 MessagePumpForUI* message_pump = reinterpret_cast<MessagePumpForUI*>(data); 337 MessagePumpForUI* message_pump = reinterpret_cast<MessagePumpForUI*>(data);
353 message_pump->DispatchEvents(event); 338
339 message_pump->WillProcessEvent(event);
340 if (message_pump->state_ && // state_ may be null during tests.
341 message_pump->state_->dispatcher) {
342 if (!message_pump->state_->dispatcher->Dispatch(event))
343 message_pump->state_->should_quit = true;
344 } else {
345 gtk_main_do_event(event);
346 }
347 message_pump->DidProcessEvent(event);
354 } 348 }
355 349
356 } // namespace base 350 } // namespace base
OLDNEW
« no previous file with comments | « base/message_pump_glib.h ('k') | base/message_pump_glib_x.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698