X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FWorkArea.C;h=232e2e1651cf2f64688d471dcb43fdf8fb990d55;hb=98c966c64594611e469313314abd1e59524adb4a;hp=7b028ef122966cb1b47716aa94a61582c1f94193;hpb=ad6d9e444b6ae6a64892d711e0364f0c909dd759;p=lyx.git diff --git a/src/WorkArea.C b/src/WorkArea.C index 7b028ef122..232e2e1651 100644 --- a/src/WorkArea.C +++ b/src/WorkArea.C @@ -1,8 +1,8 @@ /* This file is part of * ====================================================== - * + * * LyX, The Document Processor - * + * * Copyright 1995 Matthias Ettrich * Copyright 1995-2001 The LyX Team. * @@ -34,7 +34,7 @@ // xforms doesn't define this (but it should be in ). extern "C" FL_APPEVENT_CB fl_set_preemptive_callback(Window, FL_APPEVENT_CB, void *); - + using std::endl; using std::abs; using std::hex; @@ -54,25 +54,24 @@ extern "C" { // Just a bunch of C wrappers around static members of WorkArea static void C_WorkArea_scroll_cb(FL_OBJECT * ob, long buf) - { + { WorkArea::scroll_cb(ob, buf); - } + } + - static int C_WorkArea_work_area_handler(FL_OBJECT * ob, int event, - FL_Coord, FL_Coord, + FL_Coord, FL_Coord, int key, void * xev) - { + { return WorkArea::work_area_handler(ob, event, 0, 0, key, xev); - } + } static int C_WorkAreaEventCB(FL_FORM * form, void * xev) { - WorkArea * wa=static_cast(form->u_vdata); - wa->event_cb(static_cast(xev)); - return 0; + WorkArea * wa = static_cast(form->u_vdata); + return wa->event_cb(static_cast(xev)); } } @@ -113,7 +112,7 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height) int const splash_y = ypos + (height - splash_h) / 2; splash_ = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON, - splash_x, splash_y, + splash_x, splash_y, splash_w, splash_h, ""); fl_set_pixmapbutton_file(obj, splash_file.c_str()); fl_set_pixmapbutton_focus_outline(obj, 3); @@ -146,7 +145,7 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height) obj->u_vdata = this; fl_set_object_callback(obj, C_WorkArea_scroll_cb, 0); setScrollbarBounds(0.0, 0.0); - + /// /// The free object @@ -160,7 +159,7 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height) << xpos + bw << '+' << ypos + bw << ' ' << width - 15 - 2 * bw << 'x' << height - 2 * bw << endl; - + work_area = obj = fl_add_free(FL_ALL_FREE, xpos + bw, ypos + bw, width - 15 - 2 * bw, // scrollbarwidth @@ -175,8 +174,8 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height) /// X selection hook - xforms gets it wrong fl_current_form->u_vdata = this; - fl_register_raw_callback(fl_current_form, FL_ALL_EVENT, C_WorkAreaEventCB); - + fl_register_raw_callback(fl_current_form, FL_ALL_EVENT, C_WorkAreaEventCB); + fl_unfreeze_all_forms(); } @@ -206,7 +205,7 @@ bool WorkArea::belowMouse() const void WorkArea::resize(int xpos, int ypos, int width, int height) { fl_freeze_all_forms(); - + int const bw = int(abs(fl_get_border_width())); // a box @@ -243,7 +242,7 @@ void destroy_object(FL_OBJECT * obj) fl_free_object(obj); } } // namespace anon - + void WorkArea::createPixmap(int width, int height) { @@ -262,7 +261,7 @@ void WorkArea::createPixmap(int width, int height) if (cur_width == width && cur_height == height && workareapixmap) return; - + cur_width = width; cur_height = height; @@ -272,11 +271,11 @@ void WorkArea::createPixmap(int width, int height) if (lyxerr.debugging(Debug::WORKAREA)) lyxerr << "Creating pixmap (" << width << 'x' << height << ")" << endl; - + workareapixmap = XCreatePixmap(fl_get_display(), RootWindow(fl_get_display(), 0), width, - height, + height, fl_get_visual_depth()); if (lyxerr.debugging(Debug::WORKAREA)) lyxerr << "\tpixmap=" << workareapixmap << endl; @@ -337,12 +336,12 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, static int x_old = -1; static int y_old = -1; static long scrollbar_value_old = -1; - + XEvent * ev = static_cast(xev); WorkArea * area = static_cast(ob->u_vdata); if (!area) return 1; - + switch (event) { case FL_DRAW: if (!area->work_area || @@ -360,7 +359,7 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, ev->xbutton.y - ob->y, ev->xbutton.button); //area->workAreaKeyPress(XK_Pointer_Button1, ev->xbutton.state); - break; + break; case FL_RELEASE: if (!ev || ev->xbutton.button == 0) break; // Should really have used xbutton.state @@ -392,7 +391,7 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, #endif { lyxerr[Debug::WORKAREA] << "Workarea event: KEYBOARD" << endl; - + KeySym keysym = 0; char dummy[1]; XKeyEvent * xke = reinterpret_cast(ev); @@ -408,7 +407,7 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, char const * tmp2 = XKeysymToString(keysym); string const stm = (tmp ? tmp : ""); string const stm2 = (tmp2 ? tmp2 : ""); - + lyxerr[Debug::KEY] << "WorkArea: Key is `" << stm << "' [" << key << "]" << endl; lyxerr[Debug::KEY] << "WorkArea: Keysym is `" << stm2 << "' [" @@ -454,7 +453,7 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, << endl; //} } - + #endif unsigned int const ret_state = xke->state; @@ -487,7 +486,7 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, last_time_pressed = xke->time; last_key_pressed = xke->keycode; last_state_pressed = ret_state; - + area->workAreaKeyPress(ret_key, ret_state); } break; @@ -533,7 +532,7 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, lyxerr[Debug::WORKAREA] << "Workarea event: OTHER" << endl; break; } - + return 1; } @@ -544,13 +543,13 @@ string clipboard_selection; bool clipboard_read = false; extern "C" { - + static int request_clipboard_cb(FL_OBJECT * /*ob*/, long /*type*/, - void const * data, long size) + void const * data, long size) { clipboard_selection.erase(); - + if (size > 0) clipboard_selection.reserve(size); for (int i = 0; i < size; ++i) @@ -564,18 +563,23 @@ extern "C" { } // namespace anon -void WorkArea::event_cb(XEvent * xev) + +int WorkArea::event_cb(XEvent * xev) { + int ret = 0; switch (xev->type) { case SelectionRequest: lyxerr[Debug::GUI] << "X requested selection." << endl; selectionRequested.emit(); +// ret = 1; break; case SelectionClear: lyxerr[Debug::GUI] << "Lost selection." << endl; selectionLost.emit(); - break; +// ret = 1; + break; } + return ret; } @@ -585,24 +589,24 @@ void WorkArea::haveSelection(bool yes) const XSetSelectionOwner(fl_get_display(), XA_PRIMARY, None, CurrentTime); return; } - + XSetSelectionOwner(fl_get_display(), XA_PRIMARY, FL_ObjWin(work_area), CurrentTime); } - -string const WorkArea::getClipboard() const + +string const WorkArea::getClipboard() const { clipboard_read = false; - + if (fl_request_clipboard(work_area, 0, request_clipboard_cb) == -1) return string(); XEvent ev; - + while (!clipboard_read) { if (fl_check_forms() == FL_EVENT) { fl_XNextEvent(&ev); - lyxerr << "Received unhandled X11 event" << endl; + lyxerr << "Received unhandled X11 event" << endl; lyxerr << "Type: 0x" << hex << ev.xany.type << " Target: 0x" << hex << ev.xany.window << endl; } @@ -610,11 +614,11 @@ string const WorkArea::getClipboard() const return clipboard_selection; } - + void WorkArea::putClipboard(string const & s) const { static string hold; hold = s; - + fl_stuff_clipboard(work_area, 0, hold.data(), hold.size(), 0); }