Make "FLTK_CONSOLIDATE_MOTION" user-definable (issue #76)
This undocumented macro is used on X11 and macOS platforms to consolidate mouse move events, i.e. to collect some events and send them later as one event. The old macro name CONSOLIDATE_MOTION has been renamed to FLTK_CONSOLIDATE_MOTION since it is now a "global" symbol. Users can define FLTK_CONSOLIDATE_MOTION in their build system, e.g. on the compiler commandline, as 0 or 1 to disable or enable this feature, respectively. For historical reasons the default is 0 (OFF) on macOS and 1 (ON) on X11 in FLTK 1.3. In FLTK 1.4 the default will always be 0 (OFF).
This commit is contained in:
parent
4cac99ed59
commit
636cca4a2b
@ -29,7 +29,10 @@
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
#define CONSOLIDATE_MOTION 0
|
||||
#ifndef FLTK_CONSOLIDATE_MOTION
|
||||
#define FLTK_CONSOLIDATE_MOTION 0
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
#include <pthread.h>
|
||||
}
|
||||
@ -114,7 +117,7 @@ static bool in_nsapp_run = false; // true during execution of [NSApp run]
|
||||
static NSMutableArray *dropped_files_list = nil; // list of files dropped at app launch
|
||||
typedef void (*open_cb_f_type)(const char *);
|
||||
static Fl_Window *starting_moved_window = NULL; // the moved window which brings its subwins with it
|
||||
#if CONSOLIDATE_MOTION
|
||||
#if FLTK_CONSOLIDATE_MOTION
|
||||
static Fl_Window* send_motion;
|
||||
extern Fl_Window* fl_xmousewin;
|
||||
#endif
|
||||
@ -906,7 +909,7 @@ static int do_queued_events( double time = 0.0 )
|
||||
}
|
||||
fl_lock_function();
|
||||
|
||||
#if CONSOLIDATE_MOTION
|
||||
#if FLTK_CONSOLIDATE_MOTION
|
||||
if (send_motion && send_motion == fl_xmousewin) {
|
||||
send_motion = 0;
|
||||
Fl::handle(FL_MOVE, fl_xmousewin);
|
||||
|
13
src/Fl_x.cxx
13
src/Fl_x.cxx
@ -20,7 +20,10 @@
|
||||
//# include "Fl_mac.cxx" // now Fl_cocoa.mm
|
||||
#elif !defined(FL_DOXYGEN)
|
||||
|
||||
# define CONSOLIDATE_MOTION 1
|
||||
#ifndef FLTK_CONSOLIDATE_MOTION
|
||||
# define FLTK_CONSOLIDATE_MOTION 1
|
||||
#endif
|
||||
|
||||
/**** Define this if your keyboard lacks a backspace key... ****/
|
||||
/* #define BACKSPACE_HACK 1 */
|
||||
|
||||
@ -193,7 +196,7 @@ void Fl::remove_fd(int n) {
|
||||
|
||||
extern int fl_send_system_handlers(void *e);
|
||||
|
||||
#if CONSOLIDATE_MOTION
|
||||
#if FLTK_CONSOLIDATE_MOTION
|
||||
static Fl_Window* send_motion;
|
||||
extern Fl_Window* fl_xmousewin;
|
||||
#endif
|
||||
@ -209,7 +212,7 @@ static void do_queued_events() {
|
||||
}
|
||||
// we send FL_LEAVE only if the mouse did not enter some other window:
|
||||
if (!in_a_window) Fl::handle(FL_LEAVE, 0);
|
||||
#if CONSOLIDATE_MOTION
|
||||
#if FLTK_CONSOLIDATE_MOTION
|
||||
else if (send_motion && send_motion == fl_xmousewin) {
|
||||
send_motion = 0;
|
||||
Fl::handle(FL_MOVE, fl_xmousewin);
|
||||
@ -1312,7 +1315,7 @@ static int px, py;
|
||||
static ulong ptime;
|
||||
|
||||
static void set_event_xy() {
|
||||
# if CONSOLIDATE_MOTION
|
||||
# if FLTK_CONSOLIDATE_MOTION
|
||||
send_motion = 0;
|
||||
# endif
|
||||
Fl::e_x_root = fl_xevent->xbutton.x_root;
|
||||
@ -2122,7 +2125,7 @@ int fl_handle(const XEvent& thisevent)
|
||||
|
||||
case MotionNotify:
|
||||
set_event_xy();
|
||||
# if CONSOLIDATE_MOTION
|
||||
# if FLTK_CONSOLIDATE_MOTION
|
||||
send_motion = fl_xmousewin = window;
|
||||
in_a_window = true;
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user