Check-in [26aea6e5ec]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:add "sdltk framebuffer" command and emergency exit by ctrl-alt-backspace when running with framebuffer video driver
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 26aea6e5ecdb382fb0ccff7e4db2fe89bd1cda38
User & Date: chw 2018-02-24 15:56:13.729
Original Comment: add "sdlkt framebuffer" command and emergency exit by ctrl-alt-backspace when running with framebuffer
Context
2018-02-27
05:42
add selected SDL2 upstream changes plus tweaks to make [undroidwish] run on fedora 27 check-in: c960aeaebd user: chw tags: trunk
2018-02-24
15:56
add "sdltk framebuffer" command and emergency exit by ctrl-alt-backspace when running with framebuffer video driver check-in: 26aea6e5ec user: chw tags: trunk
2018-02-23
20:11
add tcl upstream changes check-in: 4726d55c63 user: chw tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to jni/sdl2tk/sdl/SdlTkDecframe.c.
692
693
694
695
696
697
698

699

700
701
702
703
704
705
706
		    0.0, &x, NULL);
		if (x > bb[0] - 2 * SdlTkX.dec_frame_width) {
		    break;
		}
		p += sizeof (unsigned int);
	    }


	    Tcl_FreeEncoding(encoding);

	    Tcl_DStringFree(&ds);
	}
    }

    /* Close box */
    {
	int lw2 = SdlTkX.dec_line_width + 2;







>
|
>







692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
		    0.0, &x, NULL);
		if (x > bb[0] - 2 * SdlTkX.dec_frame_width) {
		    break;
		}
		p += sizeof (unsigned int);
	    }

	    if (encoding) {
		Tcl_FreeEncoding(encoding);
	    }
	    Tcl_DStringFree(&ds);
	}
    }

    /* Close box */
    {
	int lw2 = SdlTkX.dec_line_width + 2;
Changes to jni/sdl2tk/sdl/SdlTkInt.c.
1347
1348
1349
1350
1351
1352
1353














1354
1355
1356
1357
1358
1359
1360
	} else if (sdl_event->type == SDL_KEYUP) {
	    EVLOG("      KEYUP:  CODE=0x%02X  MOD=0x%X  SYM=0x%X",
		  sdl_event->key.keysym.scancode,
		  sdl_event->key.keysym.mod,
		  sdl_event->key.keysym.sym);
	}
#endif















	event->xkey.keycode = -1;

	if ((sdl_event->type != SDL_TEXTINPUT) &&
	    (sdl_event->type != SDL_TEXTEDITING)) {
	    int scancode = sdl_event->key.keysym.scancode;








>
>
>
>
>
>
>
>
>
>
>
>
>
>







1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
	} else if (sdl_event->type == SDL_KEYUP) {
	    EVLOG("      KEYUP:  CODE=0x%02X  MOD=0x%X  SYM=0x%X",
		  sdl_event->key.keysym.scancode,
		  sdl_event->key.keysym.mod,
		  sdl_event->key.keysym.sym);
	}
#endif

	if (SdlTkX.is_framebuffer) {
	    /* <Control><Alt_L><Backspace> sends SQL_QUIT */
	    if ((sdl_event->type == SDL_KEYDOWN) &&
		(sdl_event->key.keysym.mod & KMOD_CTRL) &&
		(sdl_event->key.keysym.mod & KMOD_LALT) &&
		(sdl_event->key.keysym.scancode == SDL_SCANCODE_BACKSPACE)) {
		SDL_Event quit_ev;

		memset(&quit_ev, 0, sizeof (quit_ev));
		quit_ev.type = SDL_QUIT;
		SDL_PushEvent(&quit_ev);
	    }
	}

	event->xkey.keycode = -1;

	if ((sdl_event->type != SDL_TEXTINPUT) &&
	    (sdl_event->type != SDL_TEXTEDITING)) {
	    int scancode = sdl_event->key.keysym.scancode;

3941
3942
3943
3944
3945
3946
3947












3948
3949
3950
3951
3952
3953
3954
{
    if (objc != 1) {
	Tcl_WrongNumArgs(interp, 1, objv, "");
	return TCL_ERROR;
    }
    return SdlTkFontList(interp);
}













static int
FullscreenObjCmd(ClientData clientData, Tcl_Interp *interp,
	       int objc, Tcl_Obj *const objv[])
{
    if (objc != 1) {
	Tcl_WrongNumArgs(interp, 1, objv, "");







>
>
>
>
>
>
>
>
>
>
>
>







3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
{
    if (objc != 1) {
	Tcl_WrongNumArgs(interp, 1, objv, "");
	return TCL_ERROR;
    }
    return SdlTkFontList(interp);
}

static int
FramebufferObjCmd(ClientData clientData, Tcl_Interp *interp,
		  int objc, Tcl_Obj *const objv[])
{
    if (objc != 1) {
	Tcl_WrongNumArgs(interp, 1, objv, "");
	return TCL_ERROR;
    }
    Tcl_SetObjResult(interp, Tcl_NewIntObj(SdlTkX.is_framebuffer));
    return TCL_OK;
}

static int
FullscreenObjCmd(ClientData clientData, Tcl_Interp *interp,
	       int objc, Tcl_Obj *const objv[])
{
    if (objc != 1) {
	Tcl_WrongNumArgs(interp, 1, objv, "");
4654
4655
4656
4657
4658
4659
4660

4661
4662
4663
4664
4665
4666
4667
    { "accelbuffer", AccelbufferObjCmd, NULL },
    { "accelerometer", AccelerometerObjCmd, NULL },
    { "addfont", AddfontObjCmd, NULL },
    { "android", AndroidObjCmd, NULL },
    { "deiconify", DeiconifyObjCmd, NULL },
    { "expose", ExposeObjCmd, NULL },
    { "fonts", FontsObjCmd, NULL },

    { "fullscreen", FullscreenObjCmd, NULL },
    { "hasgl", HasglObjCmd, NULL },
    { "iconify", IconifyObjCmd, NULL },
    { "joystick", JoystickObjCmd, NULL },
    { "log", LogObjCmd, NULL },
    { "maxroot", MaxrootObjCmd, NULL },
    { "opacity", OpacityObjCmd, NULL },







>







4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
    { "accelbuffer", AccelbufferObjCmd, NULL },
    { "accelerometer", AccelerometerObjCmd, NULL },
    { "addfont", AddfontObjCmd, NULL },
    { "android", AndroidObjCmd, NULL },
    { "deiconify", DeiconifyObjCmd, NULL },
    { "expose", ExposeObjCmd, NULL },
    { "fonts", FontsObjCmd, NULL },
    { "framebuffer", FramebufferObjCmd, NULL },
    { "fullscreen", FullscreenObjCmd, NULL },
    { "hasgl", HasglObjCmd, NULL },
    { "iconify", IconifyObjCmd, NULL },
    { "joystick", JoystickObjCmd, NULL },
    { "log", LogObjCmd, NULL },
    { "maxroot", MaxrootObjCmd, NULL },
    { "opacity", OpacityObjCmd, NULL },
Changes to jni/sdl2tk/sdl/SdlTkInt.h.
206
207
208
209
210
211
212
213
214
215
216
217
218

219
220
221
222
223
224
225
    int sdlfocus;
    int keyuc;
    int cursor_change;
#ifndef ANDROID
    Tcl_HashTable sdlcursors;
#endif

    /* Screen refresh, life-cycle */
    Region screen_dirty_region;
    Region screen_update_region;
    int in_background;
    int draw_later;
    Tcl_ThreadId event_tid;


    /* Command line */
    char *arg_width;
    char *arg_height;
    int arg_fullscreen;
    int arg_resizable;
    int arg_noborder;







|





>







206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
    int sdlfocus;
    int keyuc;
    int cursor_change;
#ifndef ANDROID
    Tcl_HashTable sdlcursors;
#endif

    /* Screen refresh, life-cycle, etc. */
    Region screen_dirty_region;
    Region screen_update_region;
    int in_background;
    int draw_later;
    Tcl_ThreadId event_tid;
    int is_framebuffer;

    /* Command line */
    char *arg_width;
    char *arg_height;
    int arg_fullscreen;
    int arg_resizable;
    int arg_noborder;
Changes to jni/sdl2tk/sdl/SdlTkX.c.
5987
5988
5989
5990
5991
5992
5993











5994
5995
5996
5997
5998
5999
6000
	display->qfree = qevent;
	display->nqtotal++;
    }

    SdlTkX.draw_later &= ~(SDLTKX_SCALED | SDLTKX_RENDCLR);
#ifdef ANDROID
    SdlTkX.draw_later |= SDLTKX_DRAW | SDLTKX_DRAWALL;











#endif
    SdlTkX.scale = SdlTkX.scale_min = 1.0f;
    SdlTkX.outrect = NULL;
    SdlTkX.viewport.x = 0;
    SdlTkX.viewport.y = 0;
    SdlTkX.viewport.w = SdlTkX.sdlsurf->w;
    SdlTkX.viewport.h = SdlTkX.sdlsurf->h;







>
>
>
>
>
>
>
>
>
>
>







5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
	display->qfree = qevent;
	display->nqtotal++;
    }

    SdlTkX.draw_later &= ~(SDLTKX_SCALED | SDLTKX_RENDCLR);
#ifdef ANDROID
    SdlTkX.draw_later |= SDLTKX_DRAW | SDLTKX_DRAWALL;
    /* Mode is always framebuffer on Android */
    SdlTkX.is_framebuffer = 1;
#else
    /* Determine framebuffer mode from video driver */
    if (strcmp(SDL_GetCurrentVideoDriver(), "KMSDRM") == 0) {
	SdlTkX.is_framebuffer = 1;
    } else if (strcmp(SDL_GetCurrentVideoDriver(), "RPI") == 0) {
	SdlTkX.is_framebuffer = 1;
    } else {
	SdlTkX.is_framebuffer = 0;
    }
#endif
    SdlTkX.scale = SdlTkX.scale_min = 1.0f;
    SdlTkX.outrect = NULL;
    SdlTkX.viewport.x = 0;
    SdlTkX.viewport.y = 0;
    SdlTkX.viewport.w = SdlTkX.sdlsurf->w;
    SdlTkX.viewport.h = SdlTkX.sdlsurf->h;