Date: Tuesday, April 22, 2014 @ 04:10:12 Author: bisson Revision: 211634
fix FS#39898 Added: inkscape/trunk/ime-placement.patch Modified: inkscape/trunk/PKGBUILD ---------------------+ PKGBUILD | 9 ++++--- ime-placement.patch | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2014-04-21 19:51:24 UTC (rev 211633) +++ PKGBUILD 2014-04-22 02:10:12 UTC (rev 211634) @@ -5,7 +5,7 @@ pkgname=inkscape pkgver=0.48.4 -pkgrel=13 +pkgrel=14 pkgdesc='Vector graphics editor using the SVG file format' url='http://inkscape.sourceforge.net/' license=('GPL' 'LGPL') @@ -20,10 +20,12 @@ 'uniconvertor: reading/writing to some proprietary formats') source=("http://downloads.sourceforge.net/project/${pkgname}/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.bz2" 'spuriouscomma.patch' - 'freetype.patch' - 'gc74.patch') + 'ime-placement.patch' + 'freetype.patch' + 'gc74.patch') sha1sums=('5f26f6ad191d1e7c2a9fb69a438722beb172224c' '7d1d5a6d1d2b0926721a994d5889c52890fc57c1' + 'b12b948ca5ee7e02703a13aa8b8bccdf67947f12' 'aba4d98bebae088c3401fd9259ea3cf70b96fbbf' '3e1b5b6852d668388a857bc7a73fb7731fb262b8') @@ -33,6 +35,7 @@ cd "${srcdir}/${pkgname}-${pkgver}" patch -p1 -i ../gc74.patch # FS#39106 patch -p0 -i ../freetype.patch # FS#37956 + patch -p1 -i ../ime-placement.patch # FS#39898 patch -p0 -i ../spuriouscomma.patch sed -i 's|/usr/bin/python\>|/usr/bin/python2|g' cxxtest/*.py sed -i 's|/usr/bin/env python\>|/usr/bin/env python2|g' share/*/{test/,}*.py Added: ime-placement.patch =================================================================== --- ime-placement.patch (rev 0) +++ ime-placement.patch 2014-04-22 02:10:12 UTC (rev 211634) @@ -0,0 +1,62 @@ +diff -aur old/src/text-context.cpp new/src/text-context.cpp +--- old/src/text-context.cpp 2011-07-08 08:25:09.468790000 -1000 ++++ new/src/text-context.cpp 2014-04-21 14:48:22.668759004 -1000 +@@ -684,6 +684,17 @@ + // articifically here, for the text object does not exist yet: + double cursor_height = sp_desktop_get_font_size_tool(desktop); + sp_ctrlline_set_coords(SP_CTRLLINE(tc->cursor), dtp, dtp + Geom::Point(0, cursor_height)); ++ if (tc->imc) { ++ GdkRectangle im_cursor; ++ Geom::Point const top_left = SP_EVENT_CONTEXT(tc)->desktop->get_display_area().corner(3); ++ Geom::Point const cursor_size(0, cursor_height); ++ Geom::Point const im_position = SP_EVENT_CONTEXT(tc)->desktop->d2w(dtp + cursor_size - top_left); ++ im_cursor.x = (int) floor(im_position[Geom::X]); ++ im_cursor.y = (int) floor(im_position[Geom::Y]); ++ im_cursor.width = 0; ++ im_cursor.height = (int) -floor(SP_EVENT_CONTEXT(tc)->desktop->d2w(cursor_size)[Geom::Y]); ++ gtk_im_context_set_cursor_location(tc->imc, &im_cursor); ++ } + event_context->_message_context->set(Inkscape::NORMAL_MESSAGE, _("Type text; <b>Enter</b> to start new line.")); // FIXME:: this is a copy of a string from _update_cursor below, do not desync + + event_context->within_tolerance = false; +@@ -1560,8 +1571,6 @@ + static void + sp_text_context_update_cursor(SPTextContext *tc, bool scroll_to_see) + { +- GdkRectangle im_cursor = { 0, 0, 1, 1 }; +- + // due to interruptible display, tc may already be destroyed during a display update before + // the cursor update (can't do both atomically, alas) + if (!tc->desktop) return; +@@ -1586,10 +1595,17 @@ + sp_ctrlline_set_coords(SP_CTRLLINE(tc->cursor), d0, d1); + + /* fixme: ... need another transformation to get canvas widget coordinate space? */ +- im_cursor.x = (int) floor(d0[Geom::X]); +- im_cursor.y = (int) floor(d0[Geom::Y]); +- im_cursor.width = (int) floor(d1[Geom::X]) - im_cursor.x; +- im_cursor.height = (int) floor(d1[Geom::Y]) - im_cursor.y; ++ if (tc->imc) { ++ GdkRectangle im_cursor = { 0, 0, 1, 1 }; ++ Geom::Point const top_left = SP_EVENT_CONTEXT(tc)->desktop->get_display_area().corner(3); ++ Geom::Point const im_d0 = SP_EVENT_CONTEXT(tc)->desktop->d2w(d0 - top_left); ++ Geom::Point const im_d1 = SP_EVENT_CONTEXT(tc)->desktop->d2w(d1 - top_left); ++ im_cursor.x = (int) floor(im_d0[Geom::X]); ++ im_cursor.y = (int) floor(im_d1[Geom::Y]); ++ im_cursor.width = (int) floor(im_d1[Geom::X]) - im_cursor.x; ++ im_cursor.height = (int) floor(im_d0[Geom::Y]) - im_cursor.y; ++ gtk_im_context_set_cursor_location(tc->imc, &im_cursor); ++ } + + tc->show = TRUE; + tc->phase = 1; +@@ -1631,9 +1647,6 @@ + } + } + +- if (tc->imc) { +- gtk_im_context_set_cursor_location(tc->imc, &im_cursor); +- } + SP_EVENT_CONTEXT(tc)->desktop->emitToolSubselectionChanged((gpointer)tc); + } +