Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
kinput2
bugzilla-62553-spotlocation.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bugzilla-62553-spotlocation.patch of Package kinput2
diff -urN kinput2-v3.1.orig/include/ConvCtrl.h kinput2-v3.1/include/ConvCtrl.h --- kinput2-v3.1.orig/include/ConvCtrl.h 2002-10-03 18:35:26.000000000 +0900 +++ kinput2-v3.1/include/ConvCtrl.h 2004-10-21 20:45:02.609797864 +0900 @@ -92,6 +92,7 @@ #define CAFonts 0x100L #define CACursor 0x200L #define CAStatusFonts 0x400L +#define CAForceRedraw 0x800L typedef struct { Position spotx, spoty; diff -urN kinput2-v3.1.orig/lib/ConvCtrl.c kinput2-v3.1/lib/ConvCtrl.c --- kinput2-v3.1.orig/lib/ConvCtrl.c 2002-10-03 18:35:27.000000000 +0900 +++ kinput2-v3.1/lib/ConvCtrl.c 2004-10-21 20:45:32.467258840 +0900 @@ -99,11 +99,14 @@ static Boolean ClassIsSubClassOf(); static void CaptureClientDead(); +static void CaptureFocusStructureChange(); static void InterceptClientKeyEvent(); static void SelectFocusKeyEvent(); static void UnselectFocusKeyEvent(); static void ClientKey(); static void ClientDead(); +static void FocusStructureChange(); + static Boolean SafeGetWindowAttributes(); static void CheckAttributes(); @@ -555,6 +558,7 @@ GetClientCoordinates(ccw); CaptureClientDead(ccw); + CaptureFocusStructureChange(ccw); XtAddCallback(ccw->ccontrol.inputobj, XtNfixNotify, FixCallback, (XtPointer)ccw); @@ -608,6 +612,8 @@ MyRemoveEventHandler(dpy, ccw->ccontrol.clientwindow, DestroyNotify, ClientDead, (XtPointer)ccw); + MyRemoveEventHandler(dpy, ccw->ccontrol.focuswindow, ConfigureNotify, + FocusStructureChange, (XtPointer)ccw); if (ccw->ccontrol.probewindow != None) { MyRemoveAllEventHandler(dpy, ccw->ccontrol.probewindow); @@ -992,6 +998,17 @@ } static void +CaptureFocusStructureChange(ccw) +ConversionControlWidget ccw; +{ + Display *dpy = XtDisplay(ccw); + Window win = ccw->ccontrol.focuswindow; + MyAddEventHandler(dpy, win, ConfigureNotify, StructureNotifyMask, + FocusStructureChange, (XtPointer)ccw); +} + + +static void InterceptClientKeyEvent(ccw) ConversionControlWidget ccw; { @@ -1107,6 +1124,19 @@ XtCallCallbackList((Widget)ccw, ccw->ccontrol.endcallback, (XtPointer)True); } +static void +FocusStructureChange(ev, data) +XEvent *ev; +XtPointer data; +{ + ConversionControlWidget ccw = (ConversionControlWidget)data; + ConversionAttributes attr; + attr.focuswindow = ccw->ccontrol.focuswindow; + /* emit dummy attribute change to force redrawing */ + CControlChangeAttributes((Widget)ccw, CAForceRedraw|CAFocusWindow,&attr); +} + + /* ARGSUSED */ static void FixCallback(w, client_data, call_data) diff -urN kinput2-v3.1.orig/lib/OverConv.c kinput2-v3.1/lib/OverConv.c --- kinput2-v3.1.orig/lib/OverConv.c 2004-09-29 16:43:29.000000000 +0900 +++ kinput2-v3.1/lib/OverConv.c 2004-10-21 20:45:02.611797560 +0900 @@ -433,6 +433,14 @@ if (ocw->overthespot.ignorestatusarea) mask &= ~CAStatusArea; + if(mask & CAForceRedraw) { + int spotx, spoty; + /* reverse calculate spot location relative to the focus window */ + value->spotx = SPOTX(ocw) - FOCUSOFFX(ocw); + value->spoty = SPOTY(ocw) - FOCUSOFFY(ocw); + mask |= CASpotLocation; + } + dispres = resetDisplayObject(ocw, mask, value); tcres = resetTextCanvas(ocw, mask, value); if (dispres == NeedReconfig || tcres == NeedReconfig) { @@ -789,6 +797,7 @@ redraw = NeedReconfig; } if (mask & CAClientArea) { + getFocusOffset(ocw); if (value->clientarea.x + FOCUSOFFX(ocw) != CLAREA(ocw).x || value->clientarea.y + FOCUSOFFY(ocw) != CLAREA(ocw).y || value->clientarea.width != CLAREA(ocw).width || diff -urN kinput2-v3.1.orig/lib/imlib/imattr.c kinput2-v3.1/lib/imlib/imattr.c --- kinput2-v3.1.orig/lib/imlib/imattr.c 2004-09-29 16:43:29.000000000 +0900 +++ kinput2-v3.1/lib/imlib/imattr.c 2004-10-21 20:45:02.612797408 +0900 @@ -567,6 +567,7 @@ } icp->common_attr.focus = focus; icp->common_attr.set_mask |= ATTR_MASK_FOCUS; + icp->preedit_attr.change_mask |= ATTR_MASK_SPOT_LOCATION; return 0; } @@ -627,12 +628,8 @@ TRACE(("\tarea: %d, %d, %d, %d\n", area.x, area.y, area.width, area.height)); - if (!(ap->set_mask & ATTR_MASK_AREA) || - area.x != ap->area.x || - area.y != ap->area.y || - area.width != ap->area.width || - area.height != ap->area.height) { - ap->change_mask |= ATTR_MASK_AREA; + if ( area.width != 0 && area.height != 0 ) { + ap->change_mask |= ATTR_MASK_AREA; } ap->area.x = area.x; @@ -640,6 +637,7 @@ ap->area.width = area.width; ap->area.height = area.height; ap->set_mask |= ATTR_MASK_AREA; + ap->change_mask |= ATTR_MASK_SPOT_LOCATION; return 0; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor