Compare commits
	
		
			11 Commits
		
	
	
		
			eekboard-1
			...
			eekboard-1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8d70eedc5f | |||
| 74550d2424 | |||
| 148d8e7524 | |||
| aca9a4dcb6 | |||
| 953c35bdac | |||
| 596b33f149 | |||
| ef3ea618d2 | |||
| 362b210a31 | |||
| 15f7b0ecff | |||
| f72e9f5293 | |||
| 0d93f31eea | 
@ -20,7 +20,7 @@ AC_PREREQ(2.63)
 | 
				
			|||||||
dnl AC_CONFIG_SRCDIR([configure.ac])
 | 
					dnl AC_CONFIG_SRCDIR([configure.ac])
 | 
				
			||||||
AC_CONFIG_MACRO_DIR([m4])
 | 
					AC_CONFIG_MACRO_DIR([m4])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AC_INIT([eekboard], [1.0.3], [ueno@unixuser.org])
 | 
					AC_INIT([eekboard], [1.0.4], [ueno@unixuser.org])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dnl Init automake
 | 
					dnl Init automake
 | 
				
			||||||
AM_INIT_AUTOMAKE
 | 
					AM_INIT_AUTOMAKE
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -547,8 +547,8 @@
 | 
				
			|||||||
            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
					            <bounds>3.121951,162.341463,56.195122,37.463415</bounds>
 | 
				
			||||||
            <oref>outline1</oref>
 | 
					            <oref>outline1</oref>
 | 
				
			||||||
            <symbols groups="1" levels="2">
 | 
					            <symbols groups="1" levels="2">
 | 
				
			||||||
                <symbol name="cycle-keyboard" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
					                <symbol name="cycle-keyboard" icon="input-keyboard-symbolic" label="⌨" category="keyname">cycle-keyboard</symbol>
 | 
				
			||||||
                <symbol name="preferences" label="☺" category="keyname">preferences</symbol>
 | 
					                <symbol name="preferences" icon="preferences-system-symbolic" label="☺" category="keyname">preferences</symbol>
 | 
				
			||||||
            </symbols>
 | 
					            </symbols>
 | 
				
			||||||
        </key>
 | 
					        </key>
 | 
				
			||||||
        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
					        <key id="keycode133" name="keycode133" column="1" row="4">
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
<?xml version="1.0"?>
 | 
					<?xml version="1.0"?>
 | 
				
			||||||
<schemalist>
 | 
					<schemalist>
 | 
				
			||||||
  <schema id="org.fedorahosted.eekboard" path="/org/fedorahosted/eekboard/">
 | 
					  <schema id="org.fedorahosted.eekboard" path="/org/fedorahosted/eekboard/">
 | 
				
			||||||
    <key name="keyboard" type="s">
 | 
					    <key name="keyboards" type="as">
 | 
				
			||||||
      <default>'us'</default>
 | 
					      <default>['us']</default>
 | 
				
			||||||
      <summary>Keyboard types</summary>
 | 
					      <summary>Keyboard types</summary>
 | 
				
			||||||
      <description>keyboard types (comma separated).</description>
 | 
					      <description>keyboard types.</description>
 | 
				
			||||||
    </key>
 | 
					    </key>
 | 
				
			||||||
    <key name="ui-toolkit" type="s">
 | 
					    <key name="ui-toolkit" type="s">
 | 
				
			||||||
      <default>'gtk'</default>
 | 
					      <default>'gtk'</default>
 | 
				
			||||||
@ -46,6 +46,16 @@
 | 
				
			|||||||
      <summary>Switch to fullscreen mode when startup</summary>
 | 
					      <summary>Switch to fullscreen mode when startup</summary>
 | 
				
			||||||
      <description>If true, switch to fullscreen mode when startup.</description>
 | 
					      <description>If true, switch to fullscreen mode when startup.</description>
 | 
				
			||||||
    </key>
 | 
					    </key>
 | 
				
			||||||
 | 
					    <key name="size-constraint-landscape" type="(dd)">
 | 
				
			||||||
 | 
					      <default>(1.0, 0.3)</default>
 | 
				
			||||||
 | 
					      <summary>Constraint of the maximum window size on landscape screen</summary>
 | 
				
			||||||
 | 
					      <description>Constraint of maximum window size on landscape screen</description>
 | 
				
			||||||
 | 
					    </key>
 | 
				
			||||||
 | 
					    <key name="size-constraint-portrait" type="(dd)">
 | 
				
			||||||
 | 
					      <default>(1.0, 0.5)</default>
 | 
				
			||||||
 | 
					      <summary>Constraint of the maximum window size on portrait screen</summary>
 | 
				
			||||||
 | 
					      <description>Constraint of maximum window size on portrait screen</description>
 | 
				
			||||||
 | 
					    </key>
 | 
				
			||||||
    <key name="theme" type="s">
 | 
					    <key name="theme" type="s">
 | 
				
			||||||
      <default>'default'</default>
 | 
					      <default>'default'</default>
 | 
				
			||||||
      <summary>Theme</summary>
 | 
					      <summary>Theme</summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -229,12 +229,17 @@ eek_gtk_keyboard_real_button_release_event (GtkWidget      *self,
 | 
				
			|||||||
                                            GdkEventButton *event)
 | 
					                                            GdkEventButton *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
					    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
    GList *head;
 | 
					    GList *head = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    head = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
					    /* Make a copy of HEAD before sending "released" signal on
 | 
				
			||||||
    for (; head; head = g_list_next (head)) {
 | 
					       elements, so that the default handler of
 | 
				
			||||||
 | 
					       EekKeyboard::key-released signal can remove elements from its
 | 
				
			||||||
 | 
					       internal copy */
 | 
				
			||||||
 | 
					    head = g_list_copy (head);
 | 
				
			||||||
 | 
					    for (; head; head = g_list_next (head))
 | 
				
			||||||
        g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
					        g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
				
			||||||
    }
 | 
					    g_list_free (head);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -251,12 +256,20 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget      *self,
 | 
				
			|||||||
    if (key) {
 | 
					    if (key) {
 | 
				
			||||||
        GList *head = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
					        GList *head = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
				
			||||||
        gboolean found = FALSE;
 | 
					        gboolean found = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Make a copy of HEAD before sending "cancelled" signal on
 | 
				
			||||||
 | 
					           elements, so that the default handler of
 | 
				
			||||||
 | 
					           EekKeyboard::key-cancelled signal can remove elements from its
 | 
				
			||||||
 | 
					           internal copy */
 | 
				
			||||||
 | 
					        head = g_list_copy (head);
 | 
				
			||||||
        for (; head; head = g_list_next (head)) {
 | 
					        for (; head; head = g_list_next (head)) {
 | 
				
			||||||
            if (head->data == key)
 | 
					            if (head->data == key)
 | 
				
			||||||
                found = TRUE;
 | 
					                found = TRUE;
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                g_signal_emit_by_name (head->data, "cancelled", priv->keyboard);
 | 
					                g_signal_emit_by_name (head->data, "cancelled", priv->keyboard);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        g_list_free (head);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!found)
 | 
					        if (!found)
 | 
				
			||||||
            g_signal_emit_by_name (key, "pressed", priv->keyboard);
 | 
					            g_signal_emit_by_name (key, "pressed", priv->keyboard);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -269,12 +282,16 @@ eek_gtk_keyboard_real_unmap (GtkWidget *self)
 | 
				
			|||||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
					    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->keyboard) {
 | 
					    if (priv->keyboard) {
 | 
				
			||||||
        GList *head;
 | 
					        GList *head = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        head = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
					        /* Make a copy of HEAD before sending "released" signal on
 | 
				
			||||||
        for (; head; head = g_list_next (head)) {
 | 
					           elements, so that the default handler of
 | 
				
			||||||
 | 
					           EekKeyboard::key-released signal can remove elements from its
 | 
				
			||||||
 | 
					           internal copy */
 | 
				
			||||||
 | 
					        head = g_list_copy (head);
 | 
				
			||||||
 | 
					        for (; head; head = g_list_next (head))
 | 
				
			||||||
            g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
					            g_signal_emit_by_name (head->data, "released", priv->keyboard);
 | 
				
			||||||
        }
 | 
					        g_list_free (head);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
					    GTK_WIDGET_CLASS (eek_gtk_keyboard_parent_class)->unmap (self);
 | 
				
			||||||
 | 
				
			|||||||
@ -331,16 +331,12 @@ eek_keyboard_real_key_cancelled (EekKeyboard *self,
 | 
				
			|||||||
    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
					    EekKeyboardPrivate *priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
				
			||||||
    GList *head;
 | 
					    GList *head;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (head = priv->pressed_keys; head; ) {
 | 
					    for (head = priv->pressed_keys; head; head = g_list_next (head)) {
 | 
				
			||||||
        EekKey *pressed_key = head->data;
 | 
					        if (head->data == key) {
 | 
				
			||||||
        if (pressed_key == key) {
 | 
					            priv->pressed_keys = g_list_remove_link (priv->pressed_keys, head);
 | 
				
			||||||
            GList *next = g_list_next (head);
 | 
					 | 
				
			||||||
            priv->pressed_keys =
 | 
					 | 
				
			||||||
                g_list_remove_link (priv->pressed_keys, head);
 | 
					 | 
				
			||||||
            g_list_free1 (head);
 | 
					            g_list_free1 (head);
 | 
				
			||||||
            head = next;
 | 
					            break;
 | 
				
			||||||
        } else
 | 
					        }
 | 
				
			||||||
            head = g_list_next (head);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -608,6 +608,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
 | 
				
			|||||||
    EekBounds bounds;
 | 
					    EekBounds bounds;
 | 
				
			||||||
    const TextProperty *prop;
 | 
					    const TextProperty *prop;
 | 
				
			||||||
    PangoFontDescription *font;
 | 
					    PangoFontDescription *font;
 | 
				
			||||||
 | 
					    PangoLayoutLine *line;
 | 
				
			||||||
    gdouble scale;
 | 
					    gdouble scale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
					    symbol = eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
				
			||||||
@ -654,6 +655,9 @@ eek_renderer_real_render_key_label (EekRenderer *self,
 | 
				
			|||||||
    pango_font_description_free (font);
 | 
					    pango_font_description_free (font);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pango_layout_set_text (layout, label, -1);
 | 
					    pango_layout_set_text (layout, label, -1);
 | 
				
			||||||
 | 
					    line = pango_layout_get_line (layout, 0);
 | 
				
			||||||
 | 
					    if (line->resolved_dir == PANGO_DIRECTION_RTL)
 | 
				
			||||||
 | 
					        pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT);
 | 
				
			||||||
    pango_layout_set_width (layout,
 | 
					    pango_layout_set_width (layout,
 | 
				
			||||||
                            PANGO_SCALE * bounds.width * priv->scale * scale);
 | 
					                            PANGO_SCALE * bounds.width * priv->scale * scale);
 | 
				
			||||||
    if (prop->ellipses)
 | 
					    if (prop->ellipses)
 | 
				
			||||||
 | 
				
			|||||||
@ -360,8 +360,9 @@ eekboard_client_destroy_context (EekboardClient  *client,
 | 
				
			|||||||
    g_return_if_fail (EEKBOARD_IS_CLIENT(client));
 | 
					    g_return_if_fail (EEKBOARD_IS_CLIENT(client));
 | 
				
			||||||
    g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
 | 
					    g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    send_destroy_context (client, context, cancellable);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    priv = EEKBOARD_CLIENT_GET_PRIVATE(client);
 | 
					    priv = EEKBOARD_CLIENT_GET_PRIVATE(client);
 | 
				
			||||||
 | 
					    object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context));
 | 
				
			||||||
    g_hash_table_remove (priv->context_hash, object_path);
 | 
					    g_hash_table_remove (priv->context_hash, object_path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    send_destroy_context (client, context, cancellable);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -41,6 +41,8 @@ static gchar *opt_address = NULL;
 | 
				
			|||||||
static gboolean opt_focus = FALSE;
 | 
					static gboolean opt_focus = FALSE;
 | 
				
			||||||
static gboolean opt_keystroke = FALSE;
 | 
					static gboolean opt_keystroke = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static gchar *opt_keyboards = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean opt_fullscreen = FALSE;
 | 
					static gboolean opt_fullscreen = FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const GOptionEntry options[] = {
 | 
					static const GOptionEntry options[] = {
 | 
				
			||||||
@ -58,6 +60,8 @@ static const GOptionEntry options[] = {
 | 
				
			|||||||
    {"listen-keystroke", 's', 0, G_OPTION_ARG_NONE, &opt_keystroke,
 | 
					    {"listen-keystroke", 's', 0, G_OPTION_ARG_NONE, &opt_keystroke,
 | 
				
			||||||
     N_("Listen keystroke events with AT-SPI")},
 | 
					     N_("Listen keystroke events with AT-SPI")},
 | 
				
			||||||
#endif  /* HAVE_ATSPI */
 | 
					#endif  /* HAVE_ATSPI */
 | 
				
			||||||
 | 
					    {"keyboards", 'k', 0, G_OPTION_ARG_STRING, &opt_keyboards,
 | 
				
			||||||
 | 
					     N_("Specify keyboards (comma separated)")},
 | 
				
			||||||
    {"fullscreen", 'F', 0, G_OPTION_ARG_NONE, &opt_fullscreen,
 | 
					    {"fullscreen", 'F', 0, G_OPTION_ARG_NONE, &opt_fullscreen,
 | 
				
			||||||
     N_("Create window in fullscreen mode")},
 | 
					     N_("Create window in fullscreen mode")},
 | 
				
			||||||
    {NULL}
 | 
					    {NULL}
 | 
				
			||||||
@ -103,17 +107,19 @@ enum FocusListenerType {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
set_keyboard (Client *client,
 | 
					set_keyboards (Client              *client,
 | 
				
			||||||
              const gchar    *keyboard)
 | 
					               const gchar * const *keyboards)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (g_strcmp0 (keyboard, "system") == 0) {
 | 
					    if (g_strv_length ((gchar **)keyboards) == 0) {
 | 
				
			||||||
        if (!client_enable_xkl (client)) {
 | 
					        if (!client_enable_xkl (client)) {
 | 
				
			||||||
            g_printerr ("Can't register xklavier event listeners\n");
 | 
					            g_printerr ("Can't register xklavier event listeners\n");
 | 
				
			||||||
            return FALSE;
 | 
					            return FALSE;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (!client_set_keyboard (client, keyboard)) {
 | 
					        if (!client_set_keyboards (client, keyboards)) {
 | 
				
			||||||
            g_printerr ("Can't set keyboard \"%s\"\n", keyboard);
 | 
					            gchar *str = g_strjoinv (", ", (gchar **)keyboards);
 | 
				
			||||||
 | 
					            g_printerr ("Can't set keyboards \"%s\"\n", str);
 | 
				
			||||||
 | 
					            g_free (str);
 | 
				
			||||||
            return FALSE;
 | 
					            return FALSE;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -133,7 +139,7 @@ main (int argc, char **argv)
 | 
				
			|||||||
    GMainLoop *loop = NULL;
 | 
					    GMainLoop *loop = NULL;
 | 
				
			||||||
    gint focus;
 | 
					    gint focus;
 | 
				
			||||||
    GSettings *settings = NULL;
 | 
					    GSettings *settings = NULL;
 | 
				
			||||||
    gchar *keyboard;
 | 
					    gchar **keyboards;
 | 
				
			||||||
    gint retval = 0;
 | 
					    gint retval = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!gtk_init_check (&argc, &argv)) {
 | 
					    if (!gtk_init_check (&argc, &argv)) {
 | 
				
			||||||
@ -312,13 +318,16 @@ main (int argc, char **argv)
 | 
				
			|||||||
                      G_CALLBACK(on_destroyed), loop);
 | 
					                      G_CALLBACK(on_destroyed), loop);
 | 
				
			||||||
    g_object_unref (eekboard);
 | 
					    g_object_unref (eekboard);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    keyboard = g_settings_get_string (settings, "keyboard");
 | 
					    if (opt_keyboards != NULL)
 | 
				
			||||||
    if (!set_keyboard (client, keyboard)) {
 | 
					        keyboards = g_strsplit (opt_keyboards, ",", -1);
 | 
				
			||||||
        g_free (keyboard);
 | 
					    else
 | 
				
			||||||
 | 
					        keyboards = g_settings_get_strv (settings, "keyboards");
 | 
				
			||||||
 | 
					    if (!set_keyboards (client, (const gchar * const *)keyboards)) {
 | 
				
			||||||
 | 
					        g_strfreev (keyboards);
 | 
				
			||||||
        retval = 1;
 | 
					        retval = 1;
 | 
				
			||||||
        goto out;
 | 
					        goto out;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    g_free (keyboard);
 | 
					    g_strfreev (keyboards);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_main_loop_run (loop);
 | 
					    g_main_loop_run (loop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										111
									
								
								src/client.c
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								src/client.c
									
									
									
									
									
								
							@ -127,12 +127,13 @@ static void            focus_listener_cb    (const AtspiEvent       *event,
 | 
				
			|||||||
static gboolean        keystroke_listener_cb (const AtspiDeviceEvent *stroke,
 | 
					static gboolean        keystroke_listener_cb (const AtspiDeviceEvent *stroke,
 | 
				
			||||||
                                              void                   *user_data);
 | 
					                                              void                   *user_data);
 | 
				
			||||||
#endif  /* HAVE_ATSPI */
 | 
					#endif  /* HAVE_ATSPI */
 | 
				
			||||||
static gboolean        set_keyboard         (Client         *client,
 | 
					static gboolean        set_keyboards        (Client                 *client,
 | 
				
			||||||
                                             const gchar            *keyboard);
 | 
					                                             const gchar * const    *keyboard);
 | 
				
			||||||
static gboolean        set_keyboard_from_xkl (Client         *client);
 | 
					static gboolean        set_keyboards_from_xkl
 | 
				
			||||||
 | 
					                                            (Client                 *client);
 | 
				
			||||||
#ifdef HAVE_XTEST
 | 
					#ifdef HAVE_XTEST
 | 
				
			||||||
static void            update_modifier_keycodes
 | 
					static void            update_modifier_keycodes
 | 
				
			||||||
(Client         *client);
 | 
					                                            (Client                 *client);
 | 
				
			||||||
#endif  /* HAVE_XTEST */
 | 
					#endif  /* HAVE_XTEST */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -297,11 +298,11 @@ client_init (Client *client)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean
 | 
					gboolean
 | 
				
			||||||
client_set_keyboard (Client *client,
 | 
					client_set_keyboards (Client              *client,
 | 
				
			||||||
                     const gchar    *keyboard)
 | 
					                      const gchar * const *keyboards)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    gboolean retval;
 | 
					    gboolean retval;
 | 
				
			||||||
    retval = set_keyboard (client, keyboard);
 | 
					    retval = set_keyboards (client, keyboards);
 | 
				
			||||||
    if (retval && IS_KEYBOARD_VISIBLE (client))
 | 
					    if (retval && IS_KEYBOARD_VISIBLE (client))
 | 
				
			||||||
        eekboard_context_show_keyboard (client->context, NULL);
 | 
					        eekboard_context_show_keyboard (client->context, NULL);
 | 
				
			||||||
    return retval;
 | 
					    return retval;
 | 
				
			||||||
@ -343,7 +344,7 @@ client_enable_xkl (Client *client)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    xkl_engine_start_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
 | 
					    xkl_engine_start_listen (client->xkl_engine, XKLL_TRACK_KEYBOARD_STATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    retval = set_keyboard_from_xkl (client);
 | 
					    retval = set_keyboards_from_xkl (client);
 | 
				
			||||||
    if (IS_KEYBOARD_VISIBLE (client))
 | 
					    if (IS_KEYBOARD_VISIBLE (client))
 | 
				
			||||||
        eekboard_context_show_keyboard (client->context, NULL);
 | 
					        eekboard_context_show_keyboard (client->context, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -697,7 +698,7 @@ on_xkl_config_changed (XklEngine *xklengine,
 | 
				
			|||||||
    Client *client = user_data;
 | 
					    Client *client = user_data;
 | 
				
			||||||
    gboolean retval;
 | 
					    gboolean retval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    retval = set_keyboard_from_xkl (client);
 | 
					    retval = set_keyboards_from_xkl (client);
 | 
				
			||||||
    g_return_if_fail (retval);
 | 
					    g_return_if_fail (retval);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef HAVE_XTEST
 | 
					#ifdef HAVE_XTEST
 | 
				
			||||||
@ -706,46 +707,39 @@ on_xkl_config_changed (XklEngine *xklengine,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
set_keyboard (Client *client,
 | 
					set_keyboards (Client              *client,
 | 
				
			||||||
              const gchar *keyboard)
 | 
					               const gchar * const *keyboards)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GSList *keyboards = NULL;
 | 
					    guint keyboard_id;
 | 
				
			||||||
    gchar **strv, **p;
 | 
					    const gchar * const *p;
 | 
				
			||||||
 | 
					    GSList *head = NULL;
 | 
				
			||||||
    g_return_val_if_fail (keyboard != NULL, FALSE);
 | 
					 | 
				
			||||||
    g_return_val_if_fail (*keyboard != '\0', FALSE);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (client->keyboards)
 | 
					    if (client->keyboards)
 | 
				
			||||||
        g_slist_free (client->keyboards);
 | 
					        g_slist_free (client->keyboards);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    strv = g_strsplit (keyboard, ",", -1);
 | 
					    for (p = keyboards; *p != NULL; p++) {
 | 
				
			||||||
    for (p = strv; *p != NULL; p++) {
 | 
					        keyboard_id = eekboard_context_add_keyboard (client->context, *p, NULL);
 | 
				
			||||||
        guint keyboard_id;
 | 
					        if (keyboard_id == 0) {
 | 
				
			||||||
 | 
					            g_slist_free (head);
 | 
				
			||||||
        keyboard_id = eekboard_context_add_keyboard (client->context,
 | 
					 | 
				
			||||||
                                                     *p,
 | 
					 | 
				
			||||||
                                                     NULL);
 | 
					 | 
				
			||||||
        if (keyboard_id == 0)
 | 
					 | 
				
			||||||
            return FALSE;
 | 
					            return FALSE;
 | 
				
			||||||
        keyboards = g_slist_prepend (keyboards,
 | 
					 | 
				
			||||||
                                     GUINT_TO_POINTER(keyboard_id));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    g_strfreev (strv);
 | 
					        head = g_slist_prepend (head, GUINT_TO_POINTER(keyboard_id));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* make a cycle */
 | 
					    /* make a cycle */
 | 
				
			||||||
    keyboards = g_slist_reverse (keyboards);
 | 
					    head = g_slist_reverse (head);
 | 
				
			||||||
    g_slist_last (keyboards)->next = keyboards;
 | 
					    g_slist_last (head)->next = head;
 | 
				
			||||||
    client->keyboards = keyboards;
 | 
					    client->keyboards = head;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* select the first keyboard */
 | 
					    /* select the first keyboard */
 | 
				
			||||||
    eekboard_context_set_keyboard (client->context,
 | 
					    eekboard_context_set_keyboard (client->context,
 | 
				
			||||||
                                   GPOINTER_TO_UINT(keyboards->data),
 | 
					                                   GPOINTER_TO_UINT(head->data),
 | 
				
			||||||
                                   NULL);
 | 
					                                   NULL);
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static gboolean
 | 
					static gboolean
 | 
				
			||||||
set_keyboard_from_xkl (Client *client)
 | 
					set_keyboards_from_xkl (Client *client)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    XklConfigRec *rec;
 | 
					    XklConfigRec *rec;
 | 
				
			||||||
    gchar *layout, *keyboard;
 | 
					    gchar *layout, *keyboard;
 | 
				
			||||||
@ -911,10 +905,6 @@ send_fake_key_event (Client *client,
 | 
				
			|||||||
    guint xkeysym;
 | 
					    guint xkeysym;
 | 
				
			||||||
    guint keycode, replaced_keysym = 0;
 | 
					    guint keycode, replaced_keysym = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Ignore special keys and modifiers */
 | 
					 | 
				
			||||||
    if (!EEK_IS_KEYSYM(symbol) || eek_symbol_is_modifier (symbol))
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
 | 
					    xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
 | 
				
			||||||
    g_return_if_fail (xkeysym > 0);
 | 
					    g_return_if_fail (xkeysym > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -941,8 +931,7 @@ send_fake_key_event (Client *client,
 | 
				
			|||||||
    send_fake_modifier_key_event (client, modifiers, is_pressed);
 | 
					    send_fake_modifier_key_event (client, modifiers, is_pressed);
 | 
				
			||||||
    XSync (GDK_DISPLAY_XDISPLAY (display), False);
 | 
					    XSync (GDK_DISPLAY_XDISPLAY (display), False);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (display),
 | 
					    keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (display), xkeysym);
 | 
				
			||||||
                                xkeysym);
 | 
					 | 
				
			||||||
    g_return_if_fail (keycode > 0);
 | 
					    g_return_if_fail (keycode > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (display),
 | 
					    XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (display),
 | 
				
			||||||
@ -955,6 +944,48 @@ send_fake_key_event (Client *client,
 | 
				
			|||||||
        replace_keycode (client, &keycode, &replaced_keysym);
 | 
					        replace_keycode (client, &keycode, &replaced_keysym);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					send_fake_key_events (Client    *client,
 | 
				
			||||||
 | 
					                      EekSymbol *symbol,
 | 
				
			||||||
 | 
					                      guint      keyboard_modifiers)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /* Ignore modifier keys */
 | 
				
			||||||
 | 
					    if (eek_symbol_is_modifier (symbol))
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* If symbol is a text, convert chars in it to keysym */
 | 
				
			||||||
 | 
					    if (EEK_IS_TEXT(symbol)) {
 | 
				
			||||||
 | 
					        const gchar *utf8 = eek_text_get_text (EEK_TEXT(symbol));
 | 
				
			||||||
 | 
					        glong items_written;
 | 
				
			||||||
 | 
					        gunichar *ucs4 = g_utf8_to_ucs4_fast (utf8, -1, &items_written);
 | 
				
			||||||
 | 
					        gint i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (i = 0; i < items_written; i++) {
 | 
				
			||||||
 | 
					            guint xkeysym;
 | 
				
			||||||
 | 
					            EekKeysym *keysym;
 | 
				
			||||||
 | 
					            gchar *name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            name = g_strdup_printf ("U%04X", ucs4[i]);
 | 
				
			||||||
 | 
					            xkeysym = XStringToKeysym (name);
 | 
				
			||||||
 | 
					            g_free (name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            keysym = eek_keysym_new (xkeysym);
 | 
				
			||||||
 | 
					            send_fake_key_events (client,
 | 
				
			||||||
 | 
					                                  EEK_SYMBOL(keysym),
 | 
				
			||||||
 | 
					                                  keyboard_modifiers);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        g_free (ucs4);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Ignore special keys */
 | 
				
			||||||
 | 
					    if (!EEK_IS_KEYSYM(symbol))
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    send_fake_key_event (client, symbol, keyboard_modifiers, TRUE);
 | 
				
			||||||
 | 
					    send_fake_key_event (client, symbol, keyboard_modifiers, FALSE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
on_key_pressed (EekboardContext *context,
 | 
					on_key_pressed (EekboardContext *context,
 | 
				
			||||||
                const gchar     *keyname,
 | 
					                const gchar     *keyname,
 | 
				
			||||||
@ -978,9 +1009,7 @@ on_key_pressed (EekboardContext *context,
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    send_fake_key_events (client, symbol, modifiers);
 | 
				
			||||||
    send_fake_key_event (client, symbol, modifiers, TRUE);
 | 
					 | 
				
			||||||
    send_fake_key_event (client, symbol, modifiers, FALSE);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
 | 
				
			|||||||
@ -33,8 +33,8 @@ typedef struct _Client Client;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Client  *client_new                     (GDBusConnection     *connection);
 | 
					Client  *client_new                     (GDBusConnection     *connection);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean client_set_keyboard            (Client          *client,
 | 
					gboolean client_set_keyboards           (Client              *client,
 | 
				
			||||||
                                         const gchar     *keyboard);
 | 
					                                         const gchar * const *keyboard);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean client_enable_xkl              (Client              *client);
 | 
					gboolean client_enable_xkl              (Client              *client);
 | 
				
			||||||
void     client_disable_xkl             (Client              *client);
 | 
					void     client_disable_xkl             (Client              *client);
 | 
				
			||||||
 | 
				
			|||||||
@ -62,6 +62,35 @@ set_rate (const GValue       *value,
 | 
				
			|||||||
    return g_variant_new_uint32 (msecs);
 | 
					    return g_variant_new_uint32 (msecs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static gboolean
 | 
				
			||||||
 | 
					get_strv (GValue   *value,
 | 
				
			||||||
 | 
					          GVariant *variant,
 | 
				
			||||||
 | 
					          gpointer  user_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const gchar **strv = g_variant_get_strv (variant, NULL);
 | 
				
			||||||
 | 
					    gchar *text = g_strjoinv (", ", (gchar **)strv);
 | 
				
			||||||
 | 
					    g_free (strv);
 | 
				
			||||||
 | 
					    g_value_set_string (value, text);
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static GVariant *
 | 
				
			||||||
 | 
					set_strv (const GValue       *value,
 | 
				
			||||||
 | 
					          const GVariantType *expected_type,
 | 
				
			||||||
 | 
					          gpointer            user_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const gchar *text = g_value_get_string (value);
 | 
				
			||||||
 | 
					    gchar **strv = g_strsplit (text, ",", -1), **p;
 | 
				
			||||||
 | 
					    GVariant *variant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (p = strv; *p != NULL; p++)
 | 
				
			||||||
 | 
					        g_strstrip (*p);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    variant = g_variant_new_strv ((const gchar * const *)strv, -1);
 | 
				
			||||||
 | 
					    g_strfreev (strv);
 | 
				
			||||||
 | 
					    return variant;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PreferencesDialog *
 | 
					PreferencesDialog *
 | 
				
			||||||
preferences_dialog_new (void)
 | 
					preferences_dialog_new (void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -138,9 +167,10 @@ preferences_dialog_new (void)
 | 
				
			|||||||
        gtk_builder_get_object (builder, "keyboard_entry");
 | 
					        gtk_builder_get_object (builder, "keyboard_entry");
 | 
				
			||||||
    dialog->keyboard_entry = GTK_WIDGET(object);
 | 
					    dialog->keyboard_entry = GTK_WIDGET(object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_settings_bind (dialog->settings, "keyboard",
 | 
					    g_settings_bind_with_mapping (dialog->settings, "keyboards",
 | 
				
			||||||
                                  GTK_ENTRY(dialog->keyboard_entry), "text",
 | 
					                                  GTK_ENTRY(dialog->keyboard_entry), "text",
 | 
				
			||||||
                     G_SETTINGS_BIND_DEFAULT);
 | 
					                                  G_SETTINGS_BIND_DEFAULT,
 | 
				
			||||||
 | 
					                                  get_strv, set_strv, NULL, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return dialog;
 | 
					    return dialog;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -36,6 +36,8 @@
 | 
				
			|||||||
enum {
 | 
					enum {
 | 
				
			||||||
    PROP_0,
 | 
					    PROP_0,
 | 
				
			||||||
    PROP_UI_TOOLKIT,
 | 
					    PROP_UI_TOOLKIT,
 | 
				
			||||||
 | 
					    PROP_SIZE_CONSTRAINT_LANDSCAPE,
 | 
				
			||||||
 | 
					    PROP_SIZE_CONSTRAINT_PORTRAIT,
 | 
				
			||||||
    PROP_LAST
 | 
					    PROP_LAST
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -59,6 +61,8 @@ struct _ServerContextService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    GSettings *settings;
 | 
					    GSettings *settings;
 | 
				
			||||||
    UIToolkitType ui_toolkit;
 | 
					    UIToolkitType ui_toolkit;
 | 
				
			||||||
 | 
					    gdouble size_constraint_landscape[2];
 | 
				
			||||||
 | 
					    gdouble size_constraint_portrait[2];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct _ServerContextServiceClass {
 | 
					struct _ServerContextServiceClass {
 | 
				
			||||||
@ -69,6 +73,8 @@ G_DEFINE_TYPE (ServerContextService, server_context_service, EEKBOARD_TYPE_CONTE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void update_widget (ServerContextService *context);
 | 
					static void update_widget (ServerContextService *context);
 | 
				
			||||||
static void set_geometry  (ServerContextService *context);
 | 
					static void set_geometry  (ServerContextService *context);
 | 
				
			||||||
 | 
					static void set_dock      (GtkWidget            *widget,
 | 
				
			||||||
 | 
					                           GtkAllocation        *allocation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
on_monitors_changed (GdkScreen *screen,
 | 
					on_monitors_changed (GdkScreen *screen,
 | 
				
			||||||
@ -154,39 +160,27 @@ on_notify_visible (GObject *object, GParamSpec *spec, gpointer user_data)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
on_realize_set_dock (GtkWidget *widget,
 | 
					set_dock (GtkWidget *widget, GtkAllocation *allocation)
 | 
				
			||||||
                     gpointer   user_data)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef HAVE_XDOCK
 | 
					#ifdef HAVE_XDOCK
 | 
				
			||||||
    GdkWindow *window = gtk_widget_get_window (widget);
 | 
					    GdkWindow *window = gtk_widget_get_window (widget);
 | 
				
			||||||
    gint x, y, width, height;
 | 
					 | 
				
			||||||
#if !GTK_CHECK_VERSION(3,0,0)
 | 
					 | 
				
			||||||
    gint depth;
 | 
					 | 
				
			||||||
#endif  /* GTK_CHECK_VERSION(3,0,0) */
 | 
					 | 
				
			||||||
    long vals[12];
 | 
					    long vals[12];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* set window type to dock */
 | 
					    /* set window type to dock */
 | 
				
			||||||
    gdk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DOCK);
 | 
					    gdk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DOCK);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    /* set bottom strut */
 | 
					 | 
				
			||||||
#if GTK_CHECK_VERSION(3,0,0)
 | 
					 | 
				
			||||||
    gdk_window_get_geometry (window, &x, &y, &width, &height);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    gdk_window_get_geometry (window, &x, &y, &width, &height, &depth);
 | 
					 | 
				
			||||||
#endif  /* GTK_CHECK_VERSION(3,0,0) */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    vals[0] = 0;
 | 
					    vals[0] = 0;
 | 
				
			||||||
    vals[1] = 0;
 | 
					    vals[1] = 0;
 | 
				
			||||||
    vals[2] = 0;
 | 
					    vals[2] = 0;
 | 
				
			||||||
    vals[3] = height;
 | 
					    vals[3] = allocation->height;
 | 
				
			||||||
    vals[4] = 0;
 | 
					    vals[4] = 0;
 | 
				
			||||||
    vals[5] = 0;
 | 
					    vals[5] = 0;
 | 
				
			||||||
    vals[6] = 0;
 | 
					    vals[6] = 0;
 | 
				
			||||||
    vals[7] = 0;
 | 
					    vals[7] = 0;
 | 
				
			||||||
    vals[8] = 0;
 | 
					    vals[8] = 0;
 | 
				
			||||||
    vals[9] = 0;
 | 
					    vals[9] = 0;
 | 
				
			||||||
    vals[10] = x;
 | 
					    vals[10] = allocation->x;
 | 
				
			||||||
    vals[11] = x + width;
 | 
					    vals[11] = allocation->x + allocation->width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    XChangeProperty (GDK_WINDOW_XDISPLAY (window),
 | 
					    XChangeProperty (GDK_WINDOW_XDISPLAY (window),
 | 
				
			||||||
                     GDK_WINDOW_XID (window),
 | 
					                     GDK_WINDOW_XID (window),
 | 
				
			||||||
@ -197,6 +191,25 @@ on_realize_set_dock (GtkWidget *widget,
 | 
				
			|||||||
#endif  /* HAVE_XDOCK */
 | 
					#endif  /* HAVE_XDOCK */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					on_realize_set_dock (GtkWidget *widget,
 | 
				
			||||||
 | 
					                     gpointer   user_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    GtkAllocation allocation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gtk_widget_get_allocation (widget, &allocation);
 | 
				
			||||||
 | 
					    set_dock (widget, &allocation);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					on_size_allocate_set_dock (GtkWidget *widget,
 | 
				
			||||||
 | 
					                           GdkRectangle *allocation,
 | 
				
			||||||
 | 
					                           gpointer user_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (gtk_widget_get_realized (widget))
 | 
				
			||||||
 | 
					        set_dock (widget, allocation);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
on_realize_set_non_maximizable (GtkWidget *widget,
 | 
					on_realize_set_non_maximizable (GtkWidget *widget,
 | 
				
			||||||
                                gpointer   user_data)
 | 
					                                gpointer   user_data)
 | 
				
			||||||
@ -238,7 +251,16 @@ set_geometry (ServerContextService *context)
 | 
				
			|||||||
                                          context);
 | 
					                                          context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (eekboard_context_service_get_fullscreen (EEKBOARD_CONTEXT_SERVICE(context))) {
 | 
					    if (eekboard_context_service_get_fullscreen (EEKBOARD_CONTEXT_SERVICE(context))) {
 | 
				
			||||||
        gint width = rect.width, height = rect.height / 2;
 | 
					        gint width = rect.width;
 | 
				
			||||||
 | 
					        gint height = rect.height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (width > height) {
 | 
				
			||||||
 | 
					            width *= context->size_constraint_landscape[0];
 | 
				
			||||||
 | 
					            height *= context->size_constraint_landscape[1];
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            width *= context->size_constraint_portrait[0];
 | 
				
			||||||
 | 
					            height *= context->size_constraint_portrait[1];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (width * bounds.height > height * bounds.width)
 | 
					        if (width * bounds.height > height * bounds.width)
 | 
				
			||||||
            width = (height / bounds.height) * bounds.width;
 | 
					            width = (height / bounds.height) * bounds.width;
 | 
				
			||||||
@ -258,6 +280,9 @@ set_geometry (ServerContextService *context)
 | 
				
			|||||||
        g_signal_connect_after (context->window, "realize",
 | 
					        g_signal_connect_after (context->window, "realize",
 | 
				
			||||||
                                G_CALLBACK(on_realize_set_dock),
 | 
					                                G_CALLBACK(on_realize_set_dock),
 | 
				
			||||||
                                context);
 | 
					                                context);
 | 
				
			||||||
 | 
					        g_signal_connect_after (context->window, "size-allocate",
 | 
				
			||||||
 | 
					                                G_CALLBACK(on_size_allocate_set_dock),
 | 
				
			||||||
 | 
					                                context);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (context->ui_toolkit == UI_TOOLKIT_CLUTTER) {
 | 
					        if (context->ui_toolkit == UI_TOOLKIT_CLUTTER) {
 | 
				
			||||||
#if HAVE_CLUTTER_GTK
 | 
					#if HAVE_CLUTTER_GTK
 | 
				
			||||||
@ -402,6 +427,7 @@ server_context_service_set_property (GObject      *object,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ServerContextService *context = SERVER_CONTEXT_SERVICE(object);
 | 
					    ServerContextService *context = SERVER_CONTEXT_SERVICE(object);
 | 
				
			||||||
    const gchar *ui_toolkit;
 | 
					    const gchar *ui_toolkit;
 | 
				
			||||||
 | 
					    GVariant *variant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (prop_id) {
 | 
					    switch (prop_id) {
 | 
				
			||||||
    case PROP_UI_TOOLKIT:
 | 
					    case PROP_UI_TOOLKIT:
 | 
				
			||||||
@ -415,6 +441,19 @@ server_context_service_set_property (GObject      *object,
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
            g_warning ("unknown UI toolkit %s", ui_toolkit);
 | 
					            g_warning ("unknown UI toolkit %s", ui_toolkit);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case PROP_SIZE_CONSTRAINT_LANDSCAPE:
 | 
				
			||||||
 | 
					        variant = g_value_get_variant (value);
 | 
				
			||||||
 | 
					        g_variant_get (variant, "(dd)",
 | 
				
			||||||
 | 
					                       &context->size_constraint_landscape[0],
 | 
				
			||||||
 | 
					                       &context->size_constraint_landscape[1]);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case PROP_SIZE_CONSTRAINT_PORTRAIT:
 | 
				
			||||||
 | 
					        variant = g_value_get_variant (value);
 | 
				
			||||||
 | 
					        g_variant_get (variant, "(dd)",
 | 
				
			||||||
 | 
					                       &context->size_constraint_portrait[0],
 | 
				
			||||||
 | 
					                       &context->size_constraint_portrait[1]);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        g_object_set_property (object,
 | 
					        g_object_set_property (object,
 | 
				
			||||||
                               g_param_spec_get_name (pspec),
 | 
					                               g_param_spec_get_name (pspec),
 | 
				
			||||||
@ -459,6 +498,26 @@ server_context_service_class_init (ServerContextServiceClass *klass)
 | 
				
			|||||||
    g_object_class_install_property (gobject_class,
 | 
					    g_object_class_install_property (gobject_class,
 | 
				
			||||||
                                     PROP_UI_TOOLKIT,
 | 
					                                     PROP_UI_TOOLKIT,
 | 
				
			||||||
                                     pspec);
 | 
					                                     pspec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pspec = g_param_spec_variant ("size-constraint-landscape",
 | 
				
			||||||
 | 
					                                  "Size constraint landscape",
 | 
				
			||||||
 | 
					                                  "Size constraint landscape",
 | 
				
			||||||
 | 
					                                  G_VARIANT_TYPE("(dd)"),
 | 
				
			||||||
 | 
					                                  NULL,
 | 
				
			||||||
 | 
					                                  G_PARAM_WRITABLE);
 | 
				
			||||||
 | 
					    g_object_class_install_property (gobject_class,
 | 
				
			||||||
 | 
					                                     PROP_SIZE_CONSTRAINT_LANDSCAPE,
 | 
				
			||||||
 | 
					                                     pspec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pspec = g_param_spec_variant ("size-constraint-portrait",
 | 
				
			||||||
 | 
					                                  "Size constraint portrait",
 | 
				
			||||||
 | 
					                                  "Size constraint portrait",
 | 
				
			||||||
 | 
					                                  G_VARIANT_TYPE("(dd)"),
 | 
				
			||||||
 | 
					                                  NULL,
 | 
				
			||||||
 | 
					                                  G_PARAM_WRITABLE);
 | 
				
			||||||
 | 
					    g_object_class_install_property (gobject_class,
 | 
				
			||||||
 | 
					                                     PROP_SIZE_CONSTRAINT_PORTRAIT,
 | 
				
			||||||
 | 
					                                     pspec);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -484,6 +543,20 @@ server_context_service_init (ServerContextService *context)
 | 
				
			|||||||
    g_settings_bind (context->settings, "ui-toolkit",
 | 
					    g_settings_bind (context->settings, "ui-toolkit",
 | 
				
			||||||
                     context, "ui-toolkit",
 | 
					                     context, "ui-toolkit",
 | 
				
			||||||
                     G_SETTINGS_BIND_GET);
 | 
					                     G_SETTINGS_BIND_GET);
 | 
				
			||||||
 | 
					    g_settings_bind_with_mapping (context->settings, "size-constraint-landscape",
 | 
				
			||||||
 | 
					                                  context, "size-constraint-landscape",
 | 
				
			||||||
 | 
					                                  G_SETTINGS_BIND_GET,
 | 
				
			||||||
 | 
					                                  (GSettingsBindGetMapping)g_value_set_variant,
 | 
				
			||||||
 | 
					                                  NULL,
 | 
				
			||||||
 | 
					                                  NULL,
 | 
				
			||||||
 | 
					                                  NULL);
 | 
				
			||||||
 | 
					    g_settings_bind_with_mapping (context->settings, "size-constraint-portrait",
 | 
				
			||||||
 | 
					                                  context, "size-constraint-portrait",
 | 
				
			||||||
 | 
					                                  G_SETTINGS_BIND_GET,
 | 
				
			||||||
 | 
					                                  (GSettingsBindGetMapping)g_value_set_variant,
 | 
				
			||||||
 | 
					                                  NULL,
 | 
				
			||||||
 | 
					                                  NULL,
 | 
				
			||||||
 | 
					                                  NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ServerContextService *
 | 
					ServerContextService *
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user