Compare commits

..

1 commit

Author SHA1 Message Date
Juhani Krekelä
63216f7346 Add API for consolidating draw calls into logical draw operations. 2024-01-22 01:59:33 +02:00
36 changed files with 5970 additions and 8017 deletions

View file

@ -1,17 +1,3 @@
=== RELEASE 2.30 ===
Sat Jul 27 18:41:39 CEST 2024 mikulas:
Disable asynchronous DNS on Windows because of some Cygwin bug
Sun Jul 21 19:58:03 CEST 2024 mikulas:
Fix the configure script to work with GCC 14
Sun Jul 21 17:22:30 CEST 2024 mikulas:
Fix window title on kwin
=== RELEASE 2.29 === === RELEASE 2.29 ===
Thu Mar 9 19:51:20 CET 2023 Florian Weimer <fweimer@redhat.com>: Thu Mar 9 19:51:20 CET 2023 Florian Weimer <fweimer@redhat.com>:

View file

@ -1,4 +1,4 @@
Links 2.30 -- How To Install Links 2.29 -- How To Install
---------------------------- ----------------------------
Follow this step-by-step: Follow this step-by-step:

View file

@ -104,10 +104,10 @@ mailto.o main.o memory.o menu.o objreq.o os_dep.o pmshell.o png.o \
sched.o select.o session.o smb.o string.o suffix.o svg.o svgalib.o \ sched.o select.o session.o smb.o string.o suffix.o svg.o svgalib.o \
terminal.o tiff.o types.o url.o view.o view_gr.o vms.o webp.o x.o xbm.o terminal.o tiff.o types.o url.o view.o view_gr.o vms.o webp.o x.o xbm.o
@ATHEOS_GR_TRUE@links_DEPENDENCIES = atheos.o @ATHEOS_GR_TRUE@links_DEPENDENCIES = atheos.o
@HAIKU_GR_TRUE@links_DEPENDENCIES = haiku.o
@JAVASCRIPT_TRUE@links_DEPENDENCIES = builtin.o context.o ipret.o \ @JAVASCRIPT_TRUE@links_DEPENDENCIES = builtin.o context.o ipret.o \
@JAVASCRIPT_TRUE@javascr.o javascript.o md5.o md5hl.o ns.o pomocny.o \ @JAVASCRIPT_TRUE@javascr.o javascript.o md5.o md5hl.o ns.o pomocny.o \
@JAVASCRIPT_TRUE@regexp.o @JAVASCRIPT_TRUE@regexp.o
@HAIKU_GR_TRUE@links_DEPENDENCIES = haiku.o
links_LDFLAGS = links_LDFLAGS =
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)

View file

@ -625,6 +625,8 @@ struct graphics_driver atheos_driver = {
ath_draw_vline, ath_draw_vline,
ath_scroll, ath_scroll,
ath_set_clip_area, ath_set_clip_area,
NULL, /* start_draw */
NULL, /* end_draw */
ath_flush, ath_flush,
NULL, /* block */ NULL, /* block */
NULL, /* unblock */ NULL, /* unblock */

13
bfu.c
View file

@ -386,6 +386,7 @@ static void display_menu_item_gfx(struct terminal *term, struct menu *menu, int
struct graphics_device *dev = term->dev; struct graphics_device *dev = term->dev;
int y; int y;
if (it < menu->view || it >= menu->ni || it >= menu->view + menu->nview) return; if (it < menu->view || it >= menu->ni || it >= menu->view + menu->nview) return;
if (drv->start_draw) drv->start_draw(dev);
y = menu->y + G_MENU_TOP_BORDER + (it - menu->view) * G_BFU_FONT_SIZE; y = menu->y + G_MENU_TOP_BORDER + (it - menu->view) * G_BFU_FONT_SIZE;
if (item->hotkey == M_BAR && !get_text_translation(item->text, term)[0]) { if (item->hotkey == M_BAR && !get_text_translation(item->text, term)[0]) {
drv->fill_area(dev, menu->x + (G_MENU_LEFT_BORDER - 1) / 2 + 1, y, menu->x + menu->xw - (G_MENU_LEFT_BORDER + 1) / 2, y + (G_BFU_FONT_SIZE - 1) / 2, bfu_bg_color); drv->fill_area(dev, menu->x + (G_MENU_LEFT_BORDER - 1) / 2 + 1, y, menu->x + menu->xw - (G_MENU_LEFT_BORDER + 1) / 2, y + (G_BFU_FONT_SIZE - 1) / 2, bfu_bg_color);
@ -464,6 +465,7 @@ static void display_menu_item_gfx(struct terminal *term, struct menu *menu, int
drv->fill_area(dev, menu->x + menu->xw - G_MENU_LEFT_BORDER - G_MENU_LEFT_INNER_BORDER, y, menu->x + menu->xw - G_MENU_LEFT_BORDER, y + G_BFU_FONT_SIZE, bfu_fg_color); drv->fill_area(dev, menu->x + menu->xw - G_MENU_LEFT_BORDER - G_MENU_LEFT_INNER_BORDER, y, menu->x + menu->xw - G_MENU_LEFT_BORDER, y + G_BFU_FONT_SIZE, bfu_fg_color);
} }
} }
if (drv->end_draw) drv->end_draw(dev);
} }
static void display_menu_gfx(struct terminal *term, void *menu_) static void display_menu_gfx(struct terminal *term, void *menu_)
@ -480,6 +482,7 @@ static void display_menu_gfx(struct terminal *term, void *menu_)
#define PX2 (menu->x + menu->xw - (G_MENU_LEFT_BORDER + 1) / 2) #define PX2 (menu->x + menu->xw - (G_MENU_LEFT_BORDER + 1) / 2)
#define PY1 (menu->y + (G_MENU_TOP_BORDER - 1) / 2) #define PY1 (menu->y + (G_MENU_TOP_BORDER - 1) / 2)
#define PY2 (menu->y + menu->yw - (G_MENU_TOP_BORDER + 1) / 2) #define PY2 (menu->y + menu->yw - (G_MENU_TOP_BORDER + 1) / 2)
if (drv->start_draw) drv->start_draw(dev);
drv->fill_area(dev, menu->x, menu->y, menu->x + menu->xw, PY1, bfu_bg_color); drv->fill_area(dev, menu->x, menu->y, menu->x + menu->xw, PY1, bfu_bg_color);
drv->fill_area(dev, menu->x, PY1, PX1, PY2 + 1, bfu_bg_color); drv->fill_area(dev, menu->x, PY1, PX1, PY2 + 1, bfu_bg_color);
drv->fill_area(dev, PX2 + 1, PY1, menu->x + menu->xw, PY2 + 1, bfu_bg_color); drv->fill_area(dev, PX2 + 1, PY1, menu->x + menu->xw, PY2 + 1, bfu_bg_color);
@ -494,6 +497,7 @@ static void display_menu_gfx(struct terminal *term, void *menu_)
menu_ptr_set = 0; menu_ptr_set = 0;
for (p = menu->view; p < menu->ni && p < menu->view + menu->nview; p++) display_menu_item_gfx(term, menu, p); for (p = menu->view; p < menu->ni && p < menu->view + menu->nview; p++) display_menu_item_gfx(term, menu, p);
if (!menu_ptr_set) set_window_ptr(menu->win, menu->x, menu->y); if (!menu_ptr_set) set_window_ptr(menu->win, menu->x, menu->y);
if (drv->end_draw) drv->end_draw(dev);
} }
#endif #endif
@ -536,7 +540,6 @@ static void menu_func(struct window *win, struct links_event *ev, int fwd)
int f = 1; int f = 1;
struct window *w1; struct window *w1;
struct list_head *w1l; struct list_head *w1l;
f = f + 0; /* avoid warning */
foreachfrom(struct window, w1, w1l, win->term->windows, &win->list_entry) { foreachfrom(struct window, w1, w1l, win->term->windows, &win->list_entry) {
struct menu *m1; struct menu *m1;
if (w1->handler == mainmenu_func) { if (w1->handler == mainmenu_func) {
@ -724,6 +727,7 @@ static void display_mainmenu(struct terminal *term, void *menu_)
} else { } else {
struct graphics_device *dev = term->dev; struct graphics_device *dev = term->dev;
int i, p; int i, p;
if (drv->start_draw) drv->start_draw(dev);
drv->fill_area(dev, 0, 0, p = G_MAINMENU_LEFT_BORDER, G_BFU_FONT_SIZE, bfu_bg_color); drv->fill_area(dev, 0, 0, p = G_MAINMENU_LEFT_BORDER, G_BFU_FONT_SIZE, bfu_bg_color);
for (i = 0; i < menu->ni; i++) { for (i = 0; i < menu->ni; i++) {
int s = i == menu->selected; int s = i == menu->selected;
@ -744,6 +748,7 @@ static void display_mainmenu(struct terminal *term, void *menu_)
} }
} }
drv->fill_area(dev, p, 0, term->x, G_BFU_FONT_SIZE, bfu_bg_color); drv->fill_area(dev, p, 0, term->x, G_BFU_FONT_SIZE, bfu_bg_color);
if (drv->end_draw) drv->end_draw(dev);
#endif #endif
} }
} }
@ -968,6 +973,7 @@ void display_dlg_item(struct dialog_data *dlg, struct dialog_item_data *di, int
} else { } else {
struct rect rr; struct rect rr;
struct graphics_device *dev = term->dev; struct graphics_device *dev = term->dev;
if (drv->start_draw) drv->start_draw(dev);
if (!dlg->s) restrict_clip_area(dev, &rr, dlg->rr.x1, dlg->rr.y1, dlg->rr.x2, dlg->rr.y2); if (!dlg->s) restrict_clip_area(dev, &rr, dlg->rr.x1, dlg->rr.y1, dlg->rr.x2, dlg->rr.y2);
switch (di->item->type) { switch (di->item->type) {
int p, pp; int p, pp;
@ -1076,6 +1082,7 @@ void display_dlg_item(struct dialog_data *dlg, struct dialog_item_data *di, int
internal_error("display_dlg_item: unknown item: %d", di->item->type); internal_error("display_dlg_item: unknown item: %d", di->item->type);
} }
if (!dlg->s) set_clip_area(dev, &rr); if (!dlg->s) set_clip_area(dev, &rr);
if (drv->end_draw) drv->end_draw(dev);
#endif #endif
} }
} }
@ -1231,9 +1238,11 @@ static void redraw_dialog(struct terminal *term, void *dlg_)
} }
#ifdef G #ifdef G
if (F) { if (F) {
if (drv->start_draw) drv->start_draw(term->dev);
set_clip_area(term->dev, &dlg->r); set_clip_area(term->dev, &dlg->r);
for (i = 0; i < dlg->s->m; i++) if (is_rect_valid(&dlg->s->r[i])) for (i = 0; i < dlg->s->m; i++) if (is_rect_valid(&dlg->s->r[i]))
drv->fill_area(term->dev, dlg->s->r[i].x1, dlg->s->r[i].y1, dlg->s->r[i].x2, dlg->s->r[i].y2, bfu_bg_color); drv->fill_area(term->dev, dlg->s->r[i].x1, dlg->s->r[i].y1, dlg->s->r[i].x2, dlg->s->r[i].y2, bfu_bg_color);
if (drv->end_draw) drv->end_draw(term->dev);
mem_free(dlg->s); mem_free(dlg->s);
dlg->s = NULL; dlg->s = NULL;
} }
@ -1792,6 +1801,7 @@ void draw_dlg(struct dialog_data *dlg)
if (TXT_Y < dlg->y + G_DIALOG_TOP_BORDER + G_DIALOG_HLINE_SPACE + 1 - G_BFU_FONT_SIZE) TXT_Y = dlg->y + G_DIALOG_TOP_BORDER + G_DIALOG_HLINE_SPACE + 1 - G_BFU_FONT_SIZE; if (TXT_Y < dlg->y + G_DIALOG_TOP_BORDER + G_DIALOG_HLINE_SPACE + 1 - G_BFU_FONT_SIZE) TXT_Y = dlg->y + G_DIALOG_TOP_BORDER + G_DIALOG_HLINE_SPACE + 1 - G_BFU_FONT_SIZE;
set_window_pos(dlg->win, dlg->x, dlg->y, dlg->x + dlg->xw, dlg->y + dlg->yw); set_window_pos(dlg->win, dlg->x, dlg->y, dlg->x + dlg->xw, dlg->y + dlg->yw);
if (drv->start_draw) drv->start_draw(dev);
restrict_clip_area(dev, &r, TXT_X, TXT_Y, TXT_X + tl, TXT_Y + G_BFU_FONT_SIZE); restrict_clip_area(dev, &r, TXT_X, TXT_Y, TXT_X + tl, TXT_Y + G_BFU_FONT_SIZE);
rt.x1 = TXT_X; rt.x1 = TXT_X;
rt.x2 = TXT_X + tl; rt.x2 = TXT_X + tl;
@ -1838,6 +1848,7 @@ void draw_dlg(struct dialog_data *dlg)
add_to_rect_set(&dlg->s, &dlg->rr); add_to_rect_set(&dlg->s, &dlg->rr);
exclude_rect_from_set(&dlg->s, &rt); exclude_rect_from_set(&dlg->s, &rt);
restrict_clip_area(dev, &dlg->r, dlg->rr.x1, dlg->rr.y1, dlg->rr.x2, dlg->rr.y2); restrict_clip_area(dev, &dlg->r, dlg->rr.x1, dlg->rr.y1, dlg->rr.x2, dlg->rr.y2);
if (drv->end_draw) drv->end_draw(dev);
#endif #endif
} }
} }

226
certs.inc

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -940,11 +940,11 @@
#define PACKAGE "links" #define PACKAGE "links"
/* Version number of package */ /* Version number of package */
#define VERSION "2.30" #define VERSION "2.29"
/* */ /* */
#define VERSION "2.30" #define VERSION "2.29"
/* */ /* */
/* #undef HAVE_OPENMP */ /* #undef HAVE_OPENMP */

35
configure vendored
View file

@ -773,7 +773,7 @@ fi
PACKAGE=links PACKAGE=links
VERSION=2.30 VERSION=2.29
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@ -1001,7 +1001,7 @@ cat > conftest.$ac_ext << EOF
#line 1004 "configure" #line 1004 "configure"
#include "confdefs.h" #include "confdefs.h"
int main(){return(0);} main(){return(0);}
EOF EOF
if { (eval echo configure:1009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:1009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes ac_cv_prog_cc_works=yes
@ -1260,7 +1260,6 @@ else
#line 1263 "configure" #line 1263 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <ctype.h> #include <ctype.h>
#include <stdlib.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
@ -2055,7 +2054,7 @@ for ac_kw in inline __inline__ __inline; do
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
} $ac_kw int foo() { } $ac_kw foo() {
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
@ -2321,9 +2320,8 @@ else
#line 2323 "configure" #line 2323 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
int main() main()
{ {
FILE *f=fopen("conftestval", "w"); FILE *f=fopen("conftestval", "w");
if (!f) exit(1); if (!f) exit(1);
@ -2362,9 +2360,8 @@ else
#line 2363 "configure" #line 2363 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
int main() main()
{ {
FILE *f=fopen("conftestval", "w"); FILE *f=fopen("conftestval", "w");
if (!f) exit(1); if (!f) exit(1);
@ -2403,9 +2400,8 @@ else
#line 2403 "configure" #line 2403 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
int main() main()
{ {
FILE *f=fopen("conftestval", "w"); FILE *f=fopen("conftestval", "w");
if (!f) exit(1); if (!f) exit(1);
@ -2445,9 +2441,8 @@ else
#line 2444 "configure" #line 2444 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
int main() main()
{ {
FILE *f=fopen("conftestval", "w"); FILE *f=fopen("conftestval", "w");
if (!f) exit(1); if (!f) exit(1);
@ -6440,7 +6435,7 @@ cat > conftest.$ac_ext <<EOF
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
int main() main()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:6444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:6444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
@ -7221,7 +7216,6 @@ echo "configure:7215: checking for OpenSSL" >&5
#line 7219 "configure" #line 7219 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
int main() { int main() {
SSL_CTX_new((void *)0) SSL_CTX_new((void *)0)
@ -7260,7 +7254,6 @@ echo "configure:7243: checking for OpenSSL" >&5
#line 7257 "configure" #line 7257 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
int main() { int main() {
SSL_CTX_new((void *)0) SSL_CTX_new((void *)0)
@ -8941,7 +8934,7 @@ if test "$ac_x_libraries" = NO; then
# Check for the libraries. # Check for the libraries.
test -z "$x_direct_test_library" && x_direct_test_library=Xt test -z "$x_direct_test_library" && x_direct_test_library=Xt
test -z "$x_direct_test_function" && x_direct_test_function='int XtMalloc' test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
# See if we find them without any special options. # See if we find them without any special options.
# Don't add to $LIBS permanently. # Don't add to $LIBS permanently.
@ -9766,7 +9759,7 @@ cat > conftest.$ac_ext <<EOF
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
int main() main()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:9760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:9760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
@ -9809,7 +9802,7 @@ cat > conftest.$ac_ext <<EOF
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
int main() main()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:9803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:9803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
@ -9853,7 +9846,7 @@ cat > conftest.$ac_ext <<EOF
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
int main() main()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:9847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:9847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
@ -10102,7 +10095,7 @@ cat > conftest.$ac_ext <<EOF
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
int main() main()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:10096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:10096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
@ -10145,7 +10138,7 @@ cat > conftest.$ac_ext <<EOF
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
int main() main()
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:10139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:10139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then

View file

@ -5,7 +5,7 @@
AC_INIT(main.c) AC_INIT(main.c)
AM_INIT_AUTOMAKE(links, 2.30) AM_INIT_AUTOMAKE(links, 2.29)
ACLOCAL="./missing aclocal" ACLOCAL="./missing aclocal"
AUTOCONF="./missing autoconf" AUTOCONF="./missing autoconf"

2
dip.c
View file

@ -2020,6 +2020,7 @@ void g_print_text(struct graphics_device *device, int x, int y, struct style *st
if (y + style->height <= device->clip.y1 || y >= device->clip.y2) if (y + style->height <= device->clip.y1 || y >= device->clip.y2)
goto o; goto o;
if (style->flags & FF_UNDERLINE || style->flags & FF_STRIKE) { if (style->flags & FF_UNDERLINE || style->flags & FF_STRIKE) {
if (drv->start_draw) drv->start_draw(device);
/* Underline or strike */ /* Underline or strike */
if (!width) { if (!width) {
width = &my_width; width = &my_width;
@ -2050,6 +2051,7 @@ void g_print_text(struct graphics_device *device, int x, int y, struct style *st
set_clip_area(device, &saved_clip); set_clip_area(device, &saved_clip);
} }
style->flags = original_flags; style->flags = original_flags;
if (drv->end_draw) drv->end_draw(device);
return; return;
} }
while (*text) { while (*text) {

View file

@ -793,6 +793,8 @@ struct graphics_driver directfb_driver =
directfb_draw_vline, directfb_draw_vline,
directfb_scroll, directfb_scroll,
directfb_set_clip_area, directfb_set_clip_area,
NULL, /* start_draw */
NULL, /* end_draw */
directfb_flush, directfb_flush,
NULL, /* block */ NULL, /* block */
NULL, /* unblock */ NULL, /* unblock */

View file

@ -2145,6 +2145,8 @@ struct graphics_driver fb_driver = {
fb_draw_vline, fb_draw_vline,
fb_scroll, fb_scroll,
(void (*)(struct graphics_device *dev))NULL, /* set_clip_area */ (void (*)(struct graphics_device *dev))NULL, /* set_clip_area */
NULL, /* start_draw */
NULL, /* end_draw */
(void (*)(struct graphics_device *dev))NULL, /* flush */ (void (*)(struct graphics_device *dev))NULL, /* flush */
fb_block, fb_block,
fb_unblock, fb_unblock,

2
grx.c
View file

@ -559,6 +559,8 @@ struct graphics_driver grx_driver = {
grx_draw_vline, grx_draw_vline,
grx_scroll, grx_scroll,
grx_set_clip_area, grx_set_clip_area,
NULL, /* start_draw */
NULL, /* end_draw */
NULL, NULL,
grx_block, grx_block,
grx_unblock, grx_unblock,

View file

@ -988,6 +988,8 @@ struct graphics_driver haiku_driver = {
be_draw_vline, be_draw_vline,
be_scroll, be_scroll,
be_set_clip_area, be_set_clip_area,
NULL, /* start_draw */
NULL, /* end_draw */
be_flush, be_flush,
NULL, /* block */ NULL, /* block */
NULL, /* unblock */ NULL, /* unblock */

View file

@ -62,7 +62,9 @@ void g_draw_background(struct graphics_device *dev, struct background *bg, int x
} }
if (test_int_overflow(x, xw, &x2)) x2 = MAXINT; if (test_int_overflow(x, xw, &x2)) x2 = MAXINT;
if (test_int_overflow(y, yw, &y2)) y2 = MAXINT; if (test_int_overflow(y, yw, &y2)) y2 = MAXINT;
if (drv->start_draw) drv->start_draw(dev);
drv->fill_area(dev, x, y, x2, y2, color); drv->fill_area(dev, x, y, x2, y2, color);
if (drv->end_draw) drv->end_draw(dev);
} }
static void g_put_chars(void *, unsigned char *, int); static void g_put_chars(void *, unsigned char *, int);

4
img.c
View file

@ -1044,6 +1044,7 @@ int get_foreground(int rgb)
static void draw_frame_mark(struct graphics_device *dev, int x, int y, int xw, int yw, long bg, long fg, int broken) static void draw_frame_mark(struct graphics_device *dev, int x, int y, int xw, int yw, long bg, long fg, int broken)
{ {
if (drv->start_draw) drv->start_draw(dev);
#ifdef DEBUG #ifdef DEBUG
if (xw<1||yw<1) internal_error("zero dimension in draw_frame_mark"); if (xw<1||yw<1) internal_error("zero dimension in draw_frame_mark");
#endif /* #ifdef DEBUG */ #endif /* #ifdef DEBUG */
@ -1101,6 +1102,7 @@ static void draw_frame_mark(struct graphics_device *dev, int x, int y, int xw, i
draw_frame_mark(dev, x + 1, y + 1, xw - 2, yw - 2, bg, fg, 3); draw_frame_mark(dev, x + 1, y + 1, xw - 2, yw - 2, bg, fg, 3);
} }
} }
if (drv->end_draw) drv->end_draw(dev);
} }
static long image_backgronud(struct cached_image *cimg) static long image_backgronud(struct cached_image *cimg)
@ -1126,6 +1128,7 @@ static void draw_picture(struct f_data_c *fdatac, struct g_object_image *goi, in
struct cached_image *cimg = goi->cimg; struct cached_image *cimg = goi->cimg;
struct rect saved; struct rect saved;
if (drv->start_draw) drv->start_draw(dev);
#ifdef DEBUG #ifdef DEBUG
if (goi->cimg->state < 12 || goi->cimg->state >= 16) { if (goi->cimg->state < 12 || goi->cimg->state >= 16) {
fprintf(stderr, "cimg->state=%d\n", cimg->state); fprintf(stderr, "cimg->state=%d\n", cimg->state);
@ -1151,6 +1154,7 @@ static void draw_picture(struct f_data_c *fdatac, struct g_object_image *goi, in
drv->fill_area(dev, x, y + cimg->bmp.y, x + goi->goti.go.xw, y + goi->goti.go.yw, bg); drv->fill_area(dev, x, y + cimg->bmp.y, x + goi->goti.go.xw, y + goi->goti.go.yw, bg);
} }
set_clip_area(dev, &saved); set_clip_area(dev, &saved);
if (drv->end_draw) drv->end_draw(dev);
} }
/* Ensures in buffer there is not newer picture than in bitmap. Allowed to be /* Ensures in buffer there is not newer picture than in bitmap. Allowed to be

View file

@ -22,8 +22,8 @@ T_LINKS__LYNX_LIKE, "Links " VERSION_STRING "\n\nWWW browser",
T_VERSION, "Verze", T_VERSION, "Verze",
T_VERSION_INFORMATION, "Informace o verzi", T_VERSION_INFORMATION, "Informace o verzi",
T_LINKS_VERSION, "Verze Linksu", T_LINKS_VERSION, "Verze Linksu",
T_OPERATING_SYSTEM_TYPE, "Typ systému", T_OPERATING_SYSTEM_TYPE, "Typ operaèního systému",
T_OPERATING_SYSTEM_VERSION, "Verze systému", T_OPERATING_SYSTEM_VERSION, "Verze operaèního systému",
T_COMPILER, "Kompilátor", T_COMPILER, "Kompilátor",
T_WORD_SIZE, "Velikost slova", T_WORD_SIZE, "Velikost slova",
T_MEMORY, "Pamì»", T_MEMORY, "Pamì»",

View file

@ -22,8 +22,8 @@ T_LINKS__LYNX_LIKE, "Links " VERSION_STRING "\n\nText and graphics WWW browser",
T_VERSION, "Version", T_VERSION, "Version",
T_VERSION_INFORMATION, "Version information", T_VERSION_INFORMATION, "Version information",
T_LINKS_VERSION, "Links version", T_LINKS_VERSION, "Links version",
T_OPERATING_SYSTEM_TYPE, "System type", T_OPERATING_SYSTEM_TYPE, "Operating system type",
T_OPERATING_SYSTEM_VERSION, "System version", T_OPERATING_SYSTEM_VERSION, "Operating system version",
T_COMPILER, "Compiler", T_COMPILER, "Compiler",
T_WORD_SIZE, "Word size", T_WORD_SIZE, "Word size",
T_MEMORY, "Memory", T_MEMORY, "Memory",
@ -36,10 +36,10 @@ T_IPV6, "IPv6",
T_NOT_ENABLED_IN_SYSTEM, "Not enabled in system", T_NOT_ENABLED_IN_SYSTEM, "Not enabled in system",
T_LOCAL_NETWORK_ONLY, "Local network only", T_LOCAL_NETWORK_ONLY, "Local network only",
T_UTF8_TERMINAL, "UTF-8 terminal", T_UTF8_TERMINAL, "UTF-8 terminal",
T_COMPRESSION_METHODS, "Compression", T_COMPRESSION_METHODS, "Compression methods",
T_ENCRYPTION, "Encryption", T_ENCRYPTION, "Encryption",
T_NO_CERTIFICATE_VERIFICATION, "no certificate verification", T_NO_CERTIFICATE_VERIFICATION, "no certificate verification",
T_GPM_MOUSE_DRIVER, "Mouse driver", T_GPM_MOUSE_DRIVER, "GPM mouse driver",
T_XTERM_FOR_OS2, "Xterm for OS/2", T_XTERM_FOR_OS2, "Xterm for OS/2",
T_GRAPHICS_MODE, "Graphics mode", T_GRAPHICS_MODE, "Graphics mode",
T_IMAGE_LIBRARIES, "Image libraries", T_IMAGE_LIBRARIES, "Image libraries",
@ -51,7 +51,7 @@ T_DISABLED, "Disabled",
T_THREAD, "thread", T_THREAD, "thread",
T_THREADS, "threads", T_THREADS, "threads",
T_THREADS5, "threads", T_THREADS5, "threads",
T_CONFIGURATION_DIRECTORY, "Home directory", T_CONFIGURATION_DIRECTORY, "Configuration directory",
T_NONE, "None", T_NONE, "None",
T_KEYS, "Keys", T_KEYS, "Keys",
T_KEYS_DESC, "ESC display menu\n^C, q, Q quit\np, l scroll up, down\n[, ] scroll left, right\nup, down select link\nH, L select top/bottom link\n-> follow link\n<-, z go back\n', x go forward\nTAB switch frames\ng go to url\nG go to url based on current url\n^G go to url based on current link\n* toggle image displaying\n^W complete URL or search string\n^B,^X,^V,^K copy, cut, paste, cut line to/from clipboard\nAlt-1 .. Alt-9 switch virtual screens (svgalib and fb)", T_KEYS_DESC, "ESC display menu\n^C, q, Q quit\np, l scroll up, down\n[, ] scroll left, right\nup, down select link\nH, L select top/bottom link\n-> follow link\n<-, z go back\n', x go forward\nTAB switch frames\ng go to url\nG go to url based on current url\n^G go to url based on current link\n* toggle image displaying\n^W complete URL or search string\n^B,^X,^V,^K copy, cut, paste, cut line to/from clipboard\nAlt-1 .. Alt-9 switch virtual screens (svgalib and fb)",

View file

@ -4375,8 +4375,8 @@ static_const struct translation translation_czech [] = {
{ "Verze" }, { "Verze" },
{ "Informace o verzi" }, { "Informace o verzi" },
{ "Verze Linksu" }, { "Verze Linksu" },
{ "Typ syst\351mu" }, { "Typ opera\350n\355ho syst\351mu" },
{ "Verze syst\351mu" }, { "Verze opera\350n\355ho syst\351mu" },
{ "Kompil\341tor" }, { "Kompil\341tor" },
{ "Velikost slova" }, { "Velikost slova" },
{ "Pam\354\273" }, { "Pam\354\273" },
@ -6550,8 +6550,8 @@ static_const struct translation translation_english [] = {
{ "Version" }, { "Version" },
{ "Version information" }, { "Version information" },
{ "Links version" }, { "Links version" },
{ "System type" }, { "Operating system type" },
{ "System version" }, { "Operating system version" },
{ "Compiler" }, { "Compiler" },
{ "Word size" }, { "Word size" },
{ "Memory" }, { "Memory" },
@ -6564,10 +6564,10 @@ static_const struct translation translation_english [] = {
{ "Not enabled in system" }, { "Not enabled in system" },
{ "Local network only" }, { "Local network only" },
{ "UTF-8 terminal" }, { "UTF-8 terminal" },
{ "Compression" }, { "Compression methods" },
{ "Encryption" }, { "Encryption" },
{ "no certificate verification" }, { "no certificate verification" },
{ "Mouse driver" }, { "GPM mouse driver" },
{ "Xterm for OS/2" }, { "Xterm for OS/2" },
{ "Graphics mode" }, { "Graphics mode" },
{ "Image libraries" }, { "Image libraries" },
@ -6579,7 +6579,7 @@ static_const struct translation translation_english [] = {
{ "thread" }, { "thread" },
{ "threads" }, { "threads" },
{ "threads" }, { "threads" },
{ "Home directory" }, { "Configuration directory" },
{ "None" }, { "None" },
{ "Keys" }, { "Keys" },
{ "ESC display menu\n^C, q, Q quit\np, l scroll up, down\n[, ] scroll left, right\nup, down select link\nH, L select top/bottom link\n-> follow link\n<-, z go back\n', x go forward\nTAB switch frames\ng go to url\nG go to url based on current url\n^G go to url based on current link\n* toggle image displaying\n^W complete URL or search string\n^B,^X,^V,^K copy, cut, paste, cut line to/from clipboard\nAlt-1 .. Alt-9 switch virtual screens (svgalib and fb)" }, { "ESC display menu\n^C, q, Q quit\np, l scroll up, down\n[, ] scroll left, right\nup, down select link\nH, L select top/bottom link\n-> follow link\n<-, z go back\n', x go forward\nTAB switch frames\ng go to url\nG go to url based on current url\n^G go to url based on current link\n* toggle image displaying\n^W complete URL or search string\n^B,^X,^V,^K copy, cut, paste, cut line to/from clipboard\nAlt-1 .. Alt-9 switch virtual screens (svgalib and fb)" },

View file

@ -1904,6 +1904,7 @@ struct graphics_device {
/*int left, right, top, bottom;*/ /*int left, right, top, bottom;*/
struct rect clip; struct rect clip;
/* right, bottom are coords of the first point that are outside the clipping area */ /* right, bottom are coords of the first point that are outside the clipping area */
int drawing;
void *driver_data; void *driver_data;
@ -1970,6 +1971,9 @@ struct graphics_driver {
/* when set is not NULL rectangles in the set (uncovered area) should be redrawn */ /* when set is not NULL rectangles in the set (uncovered area) should be redrawn */
void (*set_clip_area)(struct graphics_device *dev); void (*set_clip_area)(struct graphics_device *dev);
void (*start_draw)(struct graphics_device *dev);
void (*end_draw)(struct graphics_device *dev);
void (*flush)(struct graphics_device *dev); void (*flush)(struct graphics_device *dev);
int (*block)(struct graphics_device *dev); /* restore old videomode and disable drawing on terminal */ int (*block)(struct graphics_device *dev); /* restore old videomode and disable drawing on terminal */

View file

@ -75,19 +75,19 @@ File links.crt
File links.exe File links.exe
File links-g.exe File links-g.exe
File dll\cygwin1.dll File dll\cygwin1.dll
File c:\cygwin\bin\cygEGL-1.dll
File c:\cygwin\bin\cygGL-1.dll
File c:\cygwin\bin\cygX11-6.dll File c:\cygwin\bin\cygX11-6.dll
File c:\cygwin\bin\cygX11-xcb-1.dll
File c:\cygwin\bin\cygXau-6.dll File c:\cygwin\bin\cygXau-6.dll
File c:\cygwin\bin\cygXdmcp-6.dll File c:\cygwin\bin\cygXdmcp-6.dll
File c:\cygwin\bin\cygXext-6.dll File c:\cygwin\bin\cygXext-6.dll
File c:\cygwin\bin\cygXrender-1.dll File c:\cygwin\bin\cygXrender-1.dll
File c:\cygwin\bin\cygbrotlidec-1.dll
File c:\cygwin\bin\cygbrotlicommon-1.dll
File c:\cygwin\bin\cygbz2-1.dll File c:\cygwin\bin\cygbz2-1.dll
File c:\cygwin\bin\cygcairo-2.dll File c:\cygwin\bin\cygcairo-2.dll
File c:\cygwin\bin\cygcroco-0.6-3.dll File c:\cygwin\bin\cygcroco-0.6-3.dll
File c:\cygwin\bin\cygcrypto-1.0.0.dll File c:\cygwin\bin\cygcrypto-1.1.dll
File c:\cygwin\bin\cygdatrie-1.dll File c:\cygwin\bin\cygdatrie-1.dll
File c:\cygwin\bin\cygdeflate-0.dll
File c:\cygwin\bin\cygevent-2-0-5.dll File c:\cygwin\bin\cygevent-2-0-5.dll
File c:\cygwin\bin\cygexpat-1.dll File c:\cygwin\bin\cygexpat-1.dll
File c:\cygwin\bin\cygffi-6.dll File c:\cygwin\bin\cygffi-6.dll
@ -96,7 +96,6 @@ File c:\cygwin\bin\cygfreetype-6.dll
File c:\cygwin\bin\cyggcc_s-1.dll File c:\cygwin\bin\cyggcc_s-1.dll
File c:\cygwin\bin\cyggdk_pixbuf-2.0-0.dll File c:\cygwin\bin\cyggdk_pixbuf-2.0-0.dll
File c:\cygwin\bin\cyggio-2.0-0.dll File c:\cygwin\bin\cyggio-2.0-0.dll
File c:\cygwin\bin\cygglapi-0.dll
File c:\cygwin\bin\cygglib-2.0-0.dll File c:\cygwin\bin\cygglib-2.0-0.dll
File c:\cygwin\bin\cyggmodule-2.0-0.dll File c:\cygwin\bin\cyggmodule-2.0-0.dll
File c:\cygwin\bin\cyggobject-2.0-0.dll File c:\cygwin\bin\cyggobject-2.0-0.dll
@ -115,16 +114,18 @@ File c:\cygwin\bin\cygpcre-1.dll
File c:\cygwin\bin\cygpixman-1-0.dll File c:\cygwin\bin\cygpixman-1-0.dll
File c:\cygwin\bin\cygpng16-16.dll File c:\cygwin\bin\cygpng16-16.dll
File c:\cygwin\bin\cygrsvg-2-2.dll File c:\cygwin\bin\cygrsvg-2-2.dll
File c:\cygwin\bin\cygssl-1.0.0.dll File c:\cygwin\bin\cygssl-1.1.dll
File c:\cygwin\bin\cygstdc++-6.dll File c:\cygwin\bin\cygstdc++-6.dll
File c:\cygwin\bin\cygthai-0.dll File c:\cygwin\bin\cygthai-0.dll
File c:\cygwin\bin\cygtiff-6.dll File c:\cygwin\bin\cygtiff-6.dll
File c:\cygwin\bin\cyguuid-1.dll
File c:\cygwin\bin\cygwebp-7.dll
File c:\cygwin\bin\cygxcb-1.dll File c:\cygwin\bin\cygxcb-1.dll
File c:\cygwin\bin\cygxcb-glx-0.dll
File c:\cygwin\bin\cygxcb-render-0.dll File c:\cygwin\bin\cygxcb-render-0.dll
File c:\cygwin\bin\cygxcb-shm-0.dll File c:\cygwin\bin\cygxcb-shm-0.dll
File c:\cygwin\bin\cygxml2-2.dll File c:\cygwin\bin\cygxml2-2.dll
File c:\cygwin\bin\cygz.dll File c:\cygwin\bin\cygz.dll
File c:\cygwin\bin\cygzstd-1.dll
;Store installation folder ;Store installation folder
WriteRegStr HKCU "Software\Links" "" $INSTDIR WriteRegStr HKCU "Software\Links" "" $INSTDIR
@ -168,20 +169,19 @@ Delete "$INSTDIR\README"
Delete "$INSTDIR\links.crt" Delete "$INSTDIR\links.crt"
Delete "$INSTDIR\links.exe" Delete "$INSTDIR\links.exe"
Delete "$INSTDIR\links-g.exe" Delete "$INSTDIR\links-g.exe"
Delete "$INSTDIR\cygwin1.dll"
Delete "$INSTDIR\cygEGL-1.dll"
Delete "$INSTDIR\cygGL-1.dll"
Delete "$INSTDIR\cygX11-6.dll" Delete "$INSTDIR\cygX11-6.dll"
Delete "$INSTDIR\cygX11-xcb-1.dll"
Delete "$INSTDIR\cygXau-6.dll" Delete "$INSTDIR\cygXau-6.dll"
Delete "$INSTDIR\cygXdmcp-6.dll" Delete "$INSTDIR\cygXdmcp-6.dll"
Delete "$INSTDIR\cygXext-6.dll" Delete "$INSTDIR\cygXext-6.dll"
Delete "$INSTDIR\cygXrender-1.dll" Delete "$INSTDIR\cygXrender-1.dll"
Delete "$INSTDIR\cygbrotlicommon-1.dll"
Delete "$INSTDIR\cygbrotlidec-1.dll"
Delete "$INSTDIR\cygbz2-1.dll" Delete "$INSTDIR\cygbz2-1.dll"
Delete "$INSTDIR\cygcairo-2.dll" Delete "$INSTDIR\cygcairo-2.dll"
Delete "$INSTDIR\cygcroco-0.6-3.dll" Delete "$INSTDIR\cygcroco-0.6-3.dll"
Delete "$INSTDIR\cygcrypto-1.0.0.dll" Delete "$INSTDIR\cygcrypto-1.1.dll"
Delete "$INSTDIR\cygdatrie-1.dll" Delete "$INSTDIR\cygdatrie-1.dll"
Delete "$INSTDIR\cygdeflate-0.dll"
Delete "$INSTDIR\cygevent-2-0-5.dll" Delete "$INSTDIR\cygevent-2-0-5.dll"
Delete "$INSTDIR\cygexpat-1.dll" Delete "$INSTDIR\cygexpat-1.dll"
Delete "$INSTDIR\cygffi-6.dll" Delete "$INSTDIR\cygffi-6.dll"
@ -190,7 +190,6 @@ Delete "$INSTDIR\cygfreetype-6.dll"
Delete "$INSTDIR\cyggcc_s-1.dll" Delete "$INSTDIR\cyggcc_s-1.dll"
Delete "$INSTDIR\cyggdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\cyggdk_pixbuf-2.0-0.dll"
Delete "$INSTDIR\cyggio-2.0-0.dll" Delete "$INSTDIR\cyggio-2.0-0.dll"
Delete "$INSTDIR\cygglapi-0.dll"
Delete "$INSTDIR\cygglib-2.0-0.dll" Delete "$INSTDIR\cygglib-2.0-0.dll"
Delete "$INSTDIR\cyggmodule-2.0-0.dll" Delete "$INSTDIR\cyggmodule-2.0-0.dll"
Delete "$INSTDIR\cyggobject-2.0-0.dll" Delete "$INSTDIR\cyggobject-2.0-0.dll"
@ -209,16 +208,19 @@ Delete "$INSTDIR\cygpcre-1.dll"
Delete "$INSTDIR\cygpixman-1-0.dll" Delete "$INSTDIR\cygpixman-1-0.dll"
Delete "$INSTDIR\cygpng16-16.dll" Delete "$INSTDIR\cygpng16-16.dll"
Delete "$INSTDIR\cygrsvg-2-2.dll" Delete "$INSTDIR\cygrsvg-2-2.dll"
Delete "$INSTDIR\cygssl-1.0.0.dll" Delete "$INSTDIR\cygssl-1.1.dll"
Delete "$INSTDIR\cygstdc++-6.dll" Delete "$INSTDIR\cygstdc++-6.dll"
Delete "$INSTDIR\cygthai-0.dll" Delete "$INSTDIR\cygthai-0.dll"
Delete "$INSTDIR\cygtiff-6.dll" Delete "$INSTDIR\cygtiff-6.dll"
Delete "$INSTDIR\cyguuid-1.dll"
Delete "$INSTDIR\cygwebp-7.dll"
Delete "$INSTDIR\cygwin1.dll"
Delete "$INSTDIR\cygxcb-1.dll" Delete "$INSTDIR\cygxcb-1.dll"
Delete "$INSTDIR\cygxcb-glx-0.dll"
Delete "$INSTDIR\cygxcb-render-0.dll" Delete "$INSTDIR\cygxcb-render-0.dll"
Delete "$INSTDIR\cygxcb-shm-0.dll" Delete "$INSTDIR\cygxcb-shm-0.dll"
Delete "$INSTDIR\cygxml2-2.dll" Delete "$INSTDIR\cygxml2-2.dll"
Delete "$INSTDIR\cygz.dll" Delete "$INSTDIR\cygz.dll"
Delete "$INSTDIR\cygzstd-1.dll"
Delete "$INSTDIR\.links\*" Delete "$INSTDIR\.links\*"
RMDir "$INSTDIR\.links" RMDir "$INSTDIR\.links"

View file

@ -1,7 +1,7 @@
<WARPIN> <WARPIN>
<HEAD> <HEAD>
<PCK INDEX="1" <PCK INDEX="1"
PACKAGEID="Mikulas Patocka\Links\Base package\2\30" PACKAGEID="Mikulas Patocka\Links\Base package\2\29"
TARGET="?:\Links" TARGET="?:\Links"
SELECT SELECT
TITLE="Links" TITLE="Links"

View file

@ -85,15 +85,14 @@ File c:\cygwin64\bin\cygbrotlicommon-1.dll
File c:\cygwin64\bin\cygbz2-1.dll File c:\cygwin64\bin\cygbz2-1.dll
File c:\cygwin64\bin\cygcairo-2.dll File c:\cygwin64\bin\cygcairo-2.dll
File c:\cygwin64\bin\cygcroco-0.6-3.dll File c:\cygwin64\bin\cygcroco-0.6-3.dll
File c:\cygwin64\bin\cygcrypto-3.dll File c:\cygwin64\bin\cygcrypto-1.1.dll
File c:\cygwin64\bin\cygdatrie-1.dll File c:\cygwin64\bin\cygdatrie-1.dll
File c:\cygwin64\bin\cygdeflate-0.dll File c:\cygwin64\bin\cygdeflate-0.dll
File c:\cygwin64\bin\cygexpat-1.dll File c:\cygwin64\bin\cygexpat-1.dll
File c:\cygwin64\bin\cygevent-2-1-7.dll File c:\cygwin64\bin\cygevent-2-1-7.dll
File c:\cygwin64\bin\cygffi-8.dll File c:\cygwin64\bin\cygffi-6.dll
File c:\cygwin64\bin\cygfontconfig-1.dll File c:\cygwin64\bin\cygfontconfig-1.dll
File c:\cygwin64\bin\cygfreetype-6.dll File c:\cygwin64\bin\cygfreetype-6.dll
File c:\cygwin64\bin\cygfribidi-0.dll
File c:\cygwin64\bin\cyggcc_s-seh-1.dll File c:\cygwin64\bin\cyggcc_s-seh-1.dll
File c:\cygwin64\bin\cyggdk_pixbuf-2.0-0.dll File c:\cygwin64\bin\cyggdk_pixbuf-2.0-0.dll
File c:\cygwin64\bin\cyggio-2.0-0.dll File c:\cygwin64\bin\cyggio-2.0-0.dll
@ -116,7 +115,7 @@ File c:\cygwin64\bin\cygpixman-1-0.dll
File c:\cygwin64\bin\cygpng16-16.dll File c:\cygwin64\bin\cygpng16-16.dll
File c:\cygwin64\bin\cygrsvg-2-2.dll File c:\cygwin64\bin\cygrsvg-2-2.dll
File c:\cygwin64\bin\cygsharpyuv-0.dll File c:\cygwin64\bin\cygsharpyuv-0.dll
File c:\cygwin64\bin\cygssl-3.dll File c:\cygwin64\bin\cygssl-1.1.dll
File c:\cygwin64\bin\cygstdc++-6.dll File c:\cygwin64\bin\cygstdc++-6.dll
File c:\cygwin64\bin\cygthai-0.dll File c:\cygwin64\bin\cygthai-0.dll
File c:\cygwin64\bin\cygtiff-7.dll File c:\cygwin64\bin\cygtiff-7.dll
@ -171,7 +170,6 @@ Delete "$INSTDIR\README"
Delete "$INSTDIR\links.crt" Delete "$INSTDIR\links.crt"
Delete "$INSTDIR\links.exe" Delete "$INSTDIR\links.exe"
Delete "$INSTDIR\links-g.exe" Delete "$INSTDIR\links-g.exe"
Delete "$INSTDIR\cygwin1.dll"
Delete "$INSTDIR\cygX11-6.dll" Delete "$INSTDIR\cygX11-6.dll"
Delete "$INSTDIR\cygXau-6.dll" Delete "$INSTDIR\cygXau-6.dll"
Delete "$INSTDIR\cygXdmcp-6.dll" Delete "$INSTDIR\cygXdmcp-6.dll"
@ -182,15 +180,14 @@ Delete "$INSTDIR\cygbrotlidec-1.dll"
Delete "$INSTDIR\cygbz2-1.dll" Delete "$INSTDIR\cygbz2-1.dll"
Delete "$INSTDIR\cygcairo-2.dll" Delete "$INSTDIR\cygcairo-2.dll"
Delete "$INSTDIR\cygcroco-0.6-3.dll" Delete "$INSTDIR\cygcroco-0.6-3.dll"
Delete "$INSTDIR\cygcrypto-3.dll" Delete "$INSTDIR\cygcrypto-1.1.dll"
Delete "$INSTDIR\cygdatrie-1.dll" Delete "$INSTDIR\cygdatrie-1.dll"
Delete "$INSTDIR\cygdeflate-0.dll" Delete "$INSTDIR\cygdeflate-0.dll"
Delete "$INSTDIR\cygevent-2-1-7.dll" Delete "$INSTDIR\cygevent-2-1-7.dll"
Delete "$INSTDIR\cygexpat-1.dll" Delete "$INSTDIR\cygexpat-1.dll"
Delete "$INSTDIR\cygffi-8.dll" Delete "$INSTDIR\cygffi-6.dll"
Delete "$INSTDIR\cygfontconfig-1.dll" Delete "$INSTDIR\cygfontconfig-1.dll"
Delete "$INSTDIR\cygfreetype-6.dll" Delete "$INSTDIR\cygfreetype-6.dll"
Delete "$INSTDIR\cygfribidi-0.dll"
Delete "$INSTDIR\cyggcc_s-seh-1.dll" Delete "$INSTDIR\cyggcc_s-seh-1.dll"
Delete "$INSTDIR\cyggdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\cyggdk_pixbuf-2.0-0.dll"
Delete "$INSTDIR\cyggio-2.0-0.dll" Delete "$INSTDIR\cyggio-2.0-0.dll"
@ -213,12 +210,13 @@ Delete "$INSTDIR\cygpixman-1-0.dll"
Delete "$INSTDIR\cygpng16-16.dll" Delete "$INSTDIR\cygpng16-16.dll"
Delete "$INSTDIR\cygrsvg-2-2.dll" Delete "$INSTDIR\cygrsvg-2-2.dll"
Delete "$INSTDIR\cygsharpyuv-0.dll" Delete "$INSTDIR\cygsharpyuv-0.dll"
Delete "$INSTDIR\cygssl-3.dll" Delete "$INSTDIR\cygssl-1.1.dll"
Delete "$INSTDIR\cygstdc++-6.dll" Delete "$INSTDIR\cygstdc++-6.dll"
Delete "$INSTDIR\cygthai-0.dll" Delete "$INSTDIR\cygthai-0.dll"
Delete "$INSTDIR\cygtiff-7.dll" Delete "$INSTDIR\cygtiff-7.dll"
Delete "$INSTDIR\cyguuid-1.dll" Delete "$INSTDIR\cyguuid-1.dll"
Delete "$INSTDIR\cygwebp-7.dll" Delete "$INSTDIR\cygwebp-7.dll"
Delete "$INSTDIR\cygwin1.dll"
Delete "$INSTDIR\cygxcb-1.dll" Delete "$INSTDIR\cygxcb-1.dll"
Delete "$INSTDIR\cygxcb-render-0.dll" Delete "$INSTDIR\cygxcb-render-0.dll"
Delete "$INSTDIR\cygxcb-shm-0.dll" Delete "$INSTDIR\cygxcb-shm-0.dll"

View file

@ -277,6 +277,8 @@ static int draw_bfu_element(struct terminal * term, int x, int y, unsigned char
struct graphics_device *dev=term->dev; struct graphics_device *dev=term->dev;
struct rect r; struct rect r;
if (drv->start_draw) drv->start_draw(dev);
restrict_clip_area(dev,&r,x,y,x+5*BFU_GRX_WIDTH,y+BFU_GRX_HEIGHT); restrict_clip_area(dev,&r,x,y,x+5*BFU_GRX_WIDTH,y+BFU_GRX_HEIGHT);
switch (type) switch (type)
@ -397,6 +399,7 @@ static int draw_bfu_element(struct terminal * term, int x, int y, unsigned char
} }
set_clip_area(dev, &r); set_clip_area(dev, &r);
if (drv->end_draw) drv->end_draw(dev);
return BFU_ELEMENT_WIDTH; return BFU_ELEMENT_WIDTH;
} }
#endif #endif
@ -1078,11 +1081,13 @@ static void redraw_list_element(struct terminal *term, struct dialog_data *dlg,
struct rect old_area; struct rect old_area;
struct style *stl = l == ld->current_pos ? bfu_style_wb : bfu_style_bw; struct style *stl = l == ld->current_pos ? bfu_style_wb : bfu_style_bw;
if (drv->start_draw) drv->start_draw(term->dev);
restrict_clip_area(term->dev, &old_area, dlg->x + x + DIALOG_LB, y, dlg->x + DIALOG_LB + w, y + G_BFU_FONT_SIZE); restrict_clip_area(term->dev, &old_area, dlg->x + x + DIALOG_LB, y, dlg->x + DIALOG_LB + w, y + G_BFU_FONT_SIZE);
g_print_text(term->dev, dlg->x + x + DIALOG_LB, y, stl, txt, NULL); g_print_text(term->dev, dlg->x + x + DIALOG_LB, y, stl, txt, NULL);
x += g_text_width(stl, txt); x += g_text_width(stl, txt);
drv->fill_area(term->dev, dlg->x + DIALOG_LB + x, y, dlg->x + DIALOG_LB + w, y + G_BFU_FONT_SIZE, bgcolor); drv->fill_area(term->dev, dlg->x + DIALOG_LB + x, y, dlg->x + DIALOG_LB + w, y + G_BFU_FONT_SIZE, bgcolor);
set_clip_area(term->dev, &old_area); set_clip_area(term->dev, &old_area);
if (drv->end_draw) drv->end_draw(term->dev);
} }
#endif #endif
mem_free(txt); mem_free(txt);
@ -1099,6 +1104,7 @@ static void redraw_list(struct terminal *term, void *bla)
int w = dlg->xw - 2 * DIALOG_LB - (F ? sirka_scrollovadla : 0); int w = dlg->xw - 2 * DIALOG_LB - (F ? sirka_scrollovadla : 0);
y = dlg->y + DIALOG_TB; y = dlg->y + DIALOG_TB;
if (drv->start_draw) drv->start_draw(term->dev);
#ifdef G #ifdef G
if (F) { if (F) {
int total = get_total_items(ld); int total = get_total_items(ld);
@ -1123,6 +1129,7 @@ static void redraw_list(struct terminal *term, void *bla)
if (dlg->s) exclude_from_set(&dlg->s, dlg->x + DIALOG_LB, y, dlg->x + DIALOG_LB + w, dlg->y + DIALOG_TB + ld->n_items * G_BFU_FONT_SIZE); if (dlg->s) exclude_from_set(&dlg->s, dlg->x + DIALOG_LB, y, dlg->x + DIALOG_LB + w, dlg->y + DIALOG_TB + ld->n_items * G_BFU_FONT_SIZE);
} }
#endif #endif
if (drv->end_draw) drv->end_draw(term->dev);
} }

View file

@ -90,7 +90,7 @@ static inline int dir_sep(unsigned char x) { return x == '/' || x == '\\'; }
static inline int dir_sep(unsigned char x) { return x == '/' || x == '\\'; } static inline int dir_sep(unsigned char x) { return x == '/' || x == '\\'; }
#define NEWLINE "\r\n" #define NEWLINE "\r\n"
#define NO_ASYNC_LOOKUP /* Cygwin 3.5.3 has some bug that async lookup doesn't work when started from a detached thread */ /*#define NO_ASYNC_LOOKUP*/
#define SYSTEM_ID SYS_WIN_32 #define SYSTEM_ID SYS_WIN_32
#define SYSTEM_NAME "Win32" #define SYSTEM_NAME "Win32"
#define DEFAULT_SHELL "cmd.exe" #define DEFAULT_SHELL "cmd.exe"

View file

@ -2887,6 +2887,8 @@ struct graphics_driver pmshell_driver = {
pm_draw_vline, pm_draw_vline,
pm_scroll, pm_scroll,
NULL, NULL,
NULL, /* start_draw */
NULL, /* end_draw */
pm_flush, pm_flush,
NULL, /* block */ NULL, /* block */
NULL, /* unblock */ NULL, /* unblock */

View file

@ -123,14 +123,10 @@ LC_ALL=
. .
/DELETE1/-1,/DELETE1/d /DELETE1/-1,/DELETE1/d
/DELETE2/-1,/DELETE2/d /DELETE2/-1,/DELETE2/d
,s/^main/int main/
,s/XtMalloc/'int XtMalloc'/
,s/foo()/int foo()/
w w
q q
EOS EOS
sed -i '/^#include <stdio.h>/a#include <stdlib.h>' configure
sed -i '/^#include <ctype.h>/a#include <stdlib.h>' configure
else else
exit exit
fi fi

View file

@ -284,9 +284,11 @@ static void x_print_screen_status(struct terminal *term, void *ses_)
if (ses->st) print_text(term, 0, term->y - 1, (int)strlen(cast_const_char ses->st), ses->st, COLOR_STATUS); if (ses->st) print_text(term, 0, term->y - 1, (int)strlen(cast_const_char ses->st), ses->st, COLOR_STATUS);
#ifdef G #ifdef G
} else { } else {
if (drv->start_draw) drv->start_draw(term->dev);
int l = 0; int l = 0;
if (ses->st) g_print_text(term->dev, 0, term->y - G_BFU_FONT_SIZE, bfu_style_wb_mono, ses->st, &l); if (ses->st) g_print_text(term->dev, 0, term->y - G_BFU_FONT_SIZE, bfu_style_wb_mono, ses->st, &l);
drv->fill_area(term->dev, l, term->y - G_BFU_FONT_SIZE, term->x, term->y, !proxies.only_proxies ? bfu_bg_color : bfu_fg_color); drv->fill_area(term->dev, l, term->y - G_BFU_FONT_SIZE, term->x, term->y, !proxies.only_proxies ? bfu_bg_color : bfu_fg_color);
if (drv->end_draw) drv->end_draw(term->dev);
#endif #endif
} }
} }
@ -666,6 +668,7 @@ void download_window_function(struct dialog_data *dlg)
} else { } else {
unsigned char *q; unsigned char *q;
int p, s, ss, m; int p, s, ss, m;
if (drv->start_draw) drv->start_draw(term->dev);
y += G_BFU_FONT_SIZE; y += G_BFU_FONT_SIZE;
q = download_percentage(down, 1); q = download_percentage(down, 1);
extend_str(&q, 1); extend_str(&q, 1);
@ -683,6 +686,7 @@ void download_window_function(struct dialog_data *dlg)
if (dlg->s) exclude_from_set(&dlg->s, x, y, x + w, y + G_BFU_FONT_SIZE); if (dlg->s) exclude_from_set(&dlg->s, x, y, x + w, y + G_BFU_FONT_SIZE);
mem_free(q); mem_free(q);
y += G_BFU_FONT_SIZE; y += G_BFU_FONT_SIZE;
if (drv->end_draw) drv->end_draw(term->dev);
#endif #endif
} }
} }

View file

@ -85,7 +85,7 @@ void add_bytes_to_str(unsigned char **s, int *l, unsigned char *a, size_t ll)
(defined(__ARM_ARCH) && __ARM_ARCH < 5) || \ (defined(__ARM_ARCH) && __ARM_ARCH < 5) || \
(defined(__sparc__) && (!defined(__VIS__) || __VIS__ < 0x300)) ||\ (defined(__sparc__) && (!defined(__VIS__) || __VIS__ < 0x300)) ||\
defined(__hppa) || \ defined(__hppa) || \
(defined(__riscv) && !defined(__riscv_zbb)) || \ defined(__riscv) || \
defined(__sh__)) defined(__sh__))
if (!(sizeof(unsigned) & (sizeof(unsigned) - 1))) { if (!(sizeof(unsigned) & (sizeof(unsigned) - 1))) {
new_length = 2U << ((sizeof(unsigned) * 8 - 1) new_length = 2U << ((sizeof(unsigned) * 8 - 1)

1537
suffix.inc

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2380,6 +2380,8 @@ struct graphics_driver svga_driver = {
NULL, /* draw_vline */ NULL, /* draw_vline */
NULL, /* scroll */ NULL, /* scroll */
NULL, /* set_clip_area */ NULL, /* set_clip_area */
NULL, /* start_draw */
NULL, /* end_draw */
NULL, /* flush */ NULL, /* flush */
vga_block, /* block */ vga_block, /* block */
vga_unblock, /* unblock */ vga_unblock, /* unblock */

View file

@ -969,7 +969,6 @@ static void redraw_screen(struct terminal *term)
int l = 0; int l = 0;
int print_next = 0; int print_next = 0;
struct term_spec *s; struct term_spec *s;
n_chars = n_chars + 0; /* avoid warning */
NO_GFX; NO_GFX;
if (!term->dirty || (term->master && is_blocked())) return; if (!term->dirty || (term->master && is_blocked())) return;
a = init_str(); a = init_str();

View file

@ -476,6 +476,7 @@ static long scroll_bar_bar_color;
void draw_vscroll_bar(struct graphics_device *dev, int x, int y, int yw, int total, int view, int pos) void draw_vscroll_bar(struct graphics_device *dev, int x, int y, int yw, int total, int view, int pos)
{ {
int spos, epos; int spos, epos;
if (drv->start_draw) drv->start_draw(dev);
drv->draw_hline(dev, x, y, x + G_SCROLL_BAR_WIDTH, scroll_bar_frame_color); drv->draw_hline(dev, x, y, x + G_SCROLL_BAR_WIDTH, scroll_bar_frame_color);
drv->draw_vline(dev, x, y, y + yw, scroll_bar_frame_color); drv->draw_vline(dev, x, y, y + yw, scroll_bar_frame_color);
drv->draw_vline(dev, x + G_SCROLL_BAR_WIDTH - 1, y, y + yw, scroll_bar_frame_color); drv->draw_vline(dev, x + G_SCROLL_BAR_WIDTH - 1, y, y + yw, scroll_bar_frame_color);
@ -486,11 +487,13 @@ void draw_vscroll_bar(struct graphics_device *dev, int x, int y, int yw, int tot
drv->fill_area(dev, x + 2, y + 1, x + G_SCROLL_BAR_WIDTH - 2, y + 2 + spos, scroll_bar_area_color); drv->fill_area(dev, x + 2, y + 1, x + G_SCROLL_BAR_WIDTH - 2, y + 2 + spos, scroll_bar_area_color);
drv->fill_area(dev, x + 2, y + 2 + spos, x + G_SCROLL_BAR_WIDTH - 2, y + 2 + epos, scroll_bar_bar_color); drv->fill_area(dev, x + 2, y + 2 + spos, x + G_SCROLL_BAR_WIDTH - 2, y + 2 + epos, scroll_bar_bar_color);
drv->fill_area(dev, x + 2, y + 2 + epos, x + G_SCROLL_BAR_WIDTH - 2, y + yw - 1, scroll_bar_area_color); drv->fill_area(dev, x + 2, y + 2 + epos, x + G_SCROLL_BAR_WIDTH - 2, y + yw - 1, scroll_bar_area_color);
if (drv->end_draw) drv->end_draw(dev);
} }
void draw_hscroll_bar(struct graphics_device *dev, int x, int y, int xw, int total, int view, int pos) void draw_hscroll_bar(struct graphics_device *dev, int x, int y, int xw, int total, int view, int pos)
{ {
int spos, epos; int spos, epos;
if (drv->start_draw) drv->start_draw(dev);
drv->draw_vline(dev, x, y, y + G_SCROLL_BAR_WIDTH, scroll_bar_frame_color); drv->draw_vline(dev, x, y, y + G_SCROLL_BAR_WIDTH, scroll_bar_frame_color);
drv->draw_hline(dev, x, y, x + xw, scroll_bar_frame_color); drv->draw_hline(dev, x, y, x + xw, scroll_bar_frame_color);
drv->draw_hline(dev, x, y + G_SCROLL_BAR_WIDTH - 1, x + xw, scroll_bar_frame_color); drv->draw_hline(dev, x, y + G_SCROLL_BAR_WIDTH - 1, x + xw, scroll_bar_frame_color);
@ -501,6 +504,7 @@ void draw_hscroll_bar(struct graphics_device *dev, int x, int y, int xw, int tot
drv->fill_area(dev, x + 1, y + 2, x + 2 + spos, y + G_SCROLL_BAR_WIDTH - 2, scroll_bar_area_color); drv->fill_area(dev, x + 1, y + 2, x + 2 + spos, y + G_SCROLL_BAR_WIDTH - 2, scroll_bar_area_color);
drv->fill_area(dev, x + 2 + spos, y + 2, x + 2 + epos, y + G_SCROLL_BAR_WIDTH - 2, scroll_bar_bar_color); drv->fill_area(dev, x + 2 + spos, y + 2, x + 2 + epos, y + G_SCROLL_BAR_WIDTH - 2, scroll_bar_bar_color);
drv->fill_area(dev, x + 2 + epos, y + 2, x + xw - 1, y + G_SCROLL_BAR_WIDTH - 2, scroll_bar_area_color); drv->fill_area(dev, x + 2 + epos, y + 2, x + xw - 1, y + G_SCROLL_BAR_WIDTH - 2, scroll_bar_area_color);
if (drv->end_draw) drv->end_draw(dev);
} }
static void g_get_search(struct f_data *f, unsigned char *s) static void g_get_search(struct f_data *f, unsigned char *s)
@ -567,9 +571,11 @@ void draw_graphical_doc(struct terminal *t, struct f_data_c *scr, int active)
vx = vs->view_posx; vx = vs->view_posx;
vy = vs->view_pos; vy = vs->view_pos;
restrict_clip_area(t->dev, &old, scr->xp, scr->yp, scr->xp + xw, scr->yp + yw); restrict_clip_area(t->dev, &old, scr->xp, scr->yp, scr->xp + xw, scr->yp + yw);
if (drv->start_draw) drv->start_draw(t->dev);
if (scr->vsb) draw_vscroll_bar(t->dev, scr->xp + xw - G_SCROLL_BAR_WIDTH, scr->yp, yw - scr->hsb * G_SCROLL_BAR_WIDTH, scr->f_data->y, yw - scr->hsb * G_SCROLL_BAR_WIDTH, vs->view_pos); if (scr->vsb) draw_vscroll_bar(t->dev, scr->xp + xw - G_SCROLL_BAR_WIDTH, scr->yp, yw - scr->hsb * G_SCROLL_BAR_WIDTH, scr->f_data->y, yw - scr->hsb * G_SCROLL_BAR_WIDTH, vs->view_pos);
if (scr->hsb) draw_hscroll_bar(t->dev, scr->xp, scr->yp + yw - G_SCROLL_BAR_WIDTH, xw - scr->vsb * G_SCROLL_BAR_WIDTH, scr->f_data->x, xw - scr->vsb * G_SCROLL_BAR_WIDTH, vs->view_posx); if (scr->hsb) draw_hscroll_bar(t->dev, scr->xp, scr->yp + yw - G_SCROLL_BAR_WIDTH, xw - scr->vsb * G_SCROLL_BAR_WIDTH, scr->f_data->x, xw - scr->vsb * G_SCROLL_BAR_WIDTH, vs->view_posx);
if (scr->vsb && scr->hsb) drv->fill_area(t->dev, scr->xp + xw - G_SCROLL_BAR_WIDTH, scr->yp + yw - G_SCROLL_BAR_WIDTH, scr->xp + xw, scr->yp + yw, scroll_bar_frame_color); if (scr->vsb && scr->hsb) drv->fill_area(t->dev, scr->xp + xw - G_SCROLL_BAR_WIDTH, scr->yp + yw - G_SCROLL_BAR_WIDTH, scr->xp + xw, scr->yp + yw, scroll_bar_frame_color);
if (drv->end_draw) drv->end_draw(t->dev);
restrict_clip_area(t->dev, NULL, scr->xp, scr->yp, scr->xp + xw - scr->vsb * G_SCROLL_BAR_WIDTH, scr->yp + yw - scr->hsb * G_SCROLL_BAR_WIDTH); restrict_clip_area(t->dev, NULL, scr->xp, scr->yp, scr->xp + xw - scr->vsb * G_SCROLL_BAR_WIDTH, scr->yp + yw - scr->hsb * G_SCROLL_BAR_WIDTH);
/*debug("buu: %d %d %d, %d %d %d", scr->xl, vx, xw, scr->yl, vy, yw);*/ /*debug("buu: %d %d %d, %d %d %d", scr->xl, vx, xw, scr->yl, vy, yw);*/
if (drv->flags & GD_DONT_USE_SCROLL && overwrite_instead_of_scroll) goto rrr; if (drv->flags & GD_DONT_USE_SCROLL && overwrite_instead_of_scroll) goto rrr;
@ -1326,6 +1332,7 @@ void draw_title(struct f_data_c *f)
int b, z, w; int b, z, w;
struct graphics_device *dev = f->ses->term->dev; struct graphics_device *dev = f->ses->term->dev;
unsigned char *title = stracpy(!drv->set_title && f->f_data && f->f_data->title && f->f_data->title[0] ? f->f_data->title : NULL); unsigned char *title = stracpy(!drv->set_title && f->f_data && f->f_data->title && f->f_data->title[0] ? f->f_data->title : NULL);
if (drv->start_draw) drv->start_draw(dev);
if (!title) { if (!title) {
if (f->rq && f->rq->url) if (f->rq && f->rq->url)
title = display_url(f->ses->term, f->rq->url, 1); title = display_url(f->ses->term, f->rq->url, 1);
@ -1342,6 +1349,7 @@ void draw_title(struct f_data_c *f)
g_print_text(dev, b, 0, !proxies.only_proxies ? bfu_style_bw : bfu_style_wb, title, &b); g_print_text(dev, b, 0, !proxies.only_proxies ? bfu_style_bw : bfu_style_wb, title, &b);
drv->fill_area(dev, b, 0, dev->size.x2, G_BFU_FONT_SIZE, !proxies.only_proxies ? bfu_bg_color : bfu_fg_color); drv->fill_area(dev, b, 0, dev->size.x2, G_BFU_FONT_SIZE, !proxies.only_proxies ? bfu_bg_color : bfu_fg_color);
mem_free(title); mem_free(title);
if (drv->end_draw) drv->end_draw(dev);
} }
static struct f_data *srch_f_data; static struct f_data *srch_f_data;

129
x.c
View file

@ -217,15 +217,13 @@ static GC x_normal_gc = 0, x_copy_gc = 0, x_drawbitmap_gc = 0, x_scroll_gc = 0;
static long x_normal_gc_color; static long x_normal_gc_color;
static struct rect x_scroll_gc_rect; static struct rect x_scroll_gc_rect;
static Colormap x_default_colormap, x_colormap; static Colormap x_default_colormap, x_colormap;
static Atom x_delete_window_atom, x_wm_protocols_atom, x_sel_atom, x_targets_atom, x_utf8_string_atom, x__net_supporting_wm_check, x__net_wm_name; static Atom x_delete_window_atom, x_wm_protocols_atom, x_sel_atom, x_targets_atom, x_utf8_string_atom;
static Pixmap x_icon = 0; static Pixmap x_icon = 0;
#ifdef X_INPUT_METHOD #ifdef X_INPUT_METHOD
static XIM xim = NULL; static XIM xim = NULL;
#endif #endif
static int prefer_utf8_window_title;
extern struct graphics_driver x_driver; extern struct graphics_driver x_driver;
static unsigned char *x_driver_param = NULL; static unsigned char *x_driver_param = NULL;
@ -1528,49 +1526,6 @@ static void x_process_events(void *data)
#endif #endif
} }
static unsigned_char_p x_get_property_string(Window w, Atom prop, Atom type, Bool del)
{
unsigned_char_p buffer;
unsigned long pty_size, pty_items;
int pty_format, ret;
Atom pty_type;
/* Get size and type of property */
ret = XGetWindowProperty(
x_display,
w,
prop,
0,
0,
False,
AnyPropertyType,
&pty_type,
&pty_format,
&pty_items,
&pty_size,
&buffer);
/*debug("1: %d %d %d %ld %ld %p", ret, pty_type, pty_format, pty_items, pty_size, buffer);*/
if (ret != Success || !buffer) return NULL;
XFree(buffer);
ret = XGetWindowProperty(
x_display,
w,
prop,
0,
(long)pty_size,
del,
AnyPropertyType,
&pty_type,
&pty_format,
&pty_items,
&pty_size,
&buffer
);
/*debug("2: %d %d %d %ld %ld %p", ret, pty_type, pty_format, pty_items, pty_size, buffer);*/
if (ret != Success || !buffer) return NULL;
return buffer;
}
static void x_after_fork(void) static void x_after_fork(void)
{ {
@ -1854,40 +1809,15 @@ visual_found:
gcv.fill_style = FillSolid; gcv.fill_style = FillSolid;
gcv.background = x_black_pixel; gcv.background = x_black_pixel;
x_delete_window_atom = XInternAtom(x_display, "WM_DELETE_WINDOW", False); x_delete_window_atom = XInternAtom(x_display,"WM_DELETE_WINDOW", False);
x_wm_protocols_atom = XInternAtom(x_display, "WM_PROTOCOLS", False); x_wm_protocols_atom = XInternAtom(x_display,"WM_PROTOCOLS", False);
x_sel_atom = XInternAtom(x_display, "SEL_PROP", False); x_sel_atom = XInternAtom(x_display, "SEL_PROP", False);
x_targets_atom = XInternAtom(x_display, "TARGETS", False); x_targets_atom = XInternAtom(x_display, "TARGETS", False);
x_utf8_string_atom = XInternAtom(x_display, "UTF8_STRING", False); x_utf8_string_atom = XInternAtom(x_display, "UTF8_STRING", False);
x__net_supporting_wm_check = XInternAtom(x_display, "_NET_SUPPORTING_WM_CHECK", False);
x__net_wm_name = XInternAtom(x_display, "_NET_WM_NAME", False);
if (x_have_palette) win_attr.colormap = x_colormap; if (x_have_palette) win_attr.colormap = x_colormap;
else win_attr.colormap = x_default_colormap; else win_attr.colormap = x_default_colormap;
prefer_utf8_window_title = 0;
#if defined(HAVE_XSUPPORTSLOCALE) && defined(HAVE_XMBTEXTLISTTOTEXTPROPERTY) && X_HAVE_UTF8_STRING
{
unsigned_char_p buffer;
Window win;
buffer = x_get_property_string(x_root_window, x__net_supporting_wm_check, XA_WINDOW, False);
if (!buffer)
goto skip_wm_name;
win = *(Window *)buffer;
XFree(buffer);
x_prepare_for_failure(X_GetProperty);
buffer = x_get_property_string(win, x__net_wm_name, AnyPropertyType, False);
if (x_test_for_failure())
goto skip_wm_name;
if (!buffer)
goto skip_wm_name;
if (!strcasecmp(cast_const_char buffer, "kwin"))
prefer_utf8_window_title = 1;
XFree(buffer);
}
skip_wm_name:
#endif
fake_window = XCreateWindow( fake_window = XCreateWindow(
x_display, x_display,
x_root_window, x_root_window,
@ -2821,7 +2751,7 @@ retry_encode_ascii:
if (XSupportsLocale()) { if (XSupportsLocale()) {
ret = XmbTextListToTextProperty(x_display, &xx_str, 1, XStdICCTextStyle, &windowName); ret = XmbTextListToTextProperty(x_display, &xx_str, 1, XStdICCTextStyle, &windowName);
#ifdef X_HAVE_UTF8_STRING #ifdef X_HAVE_UTF8_STRING
if (ret > 0 || (!ret && prefer_utf8_window_title)) { if (ret > 0) {
XFree(windowName.value); XFree(windowName.value);
ret = XmbTextListToTextProperty(x_display, &xx_str, 1, XUTF8StringStyle, &windowName); ret = XmbTextListToTextProperty(x_display, &xx_str, 1, XUTF8StringStyle, &windowName);
if (ret < 0) { if (ret < 0) {
@ -2986,13 +2916,48 @@ static unsigned char *x_get_clipboard_text(void)
} }
if (event.xselection.property) { if (event.xselection.property) {
unsigned_char_p buffer; unsigned_char_p buffer;
unsigned long pty_size, pty_items;
int pty_format, ret;
Atom pty_type;
if (event.xselection.target != type_atom) goto no_new_sel; if (event.xselection.target != type_atom) goto no_new_sel;
if (event.xselection.property != x_sel_atom) goto no_new_sel; if (event.xselection.property != x_sel_atom) goto no_new_sel;
buffer = x_get_property_string(fake_window, event.xselection.property, True, AnyPropertyType);
if (!buffer) /* Get size and type of property */
goto no_new_sel; ret = XGetWindowProperty(
x_display,
fake_window,
event.xselection.property,
0,
0,
False,
AnyPropertyType,
&pty_type,
&pty_format,
&pty_items,
&pty_size,
&buffer);
if (ret != Success) goto no_new_sel;
XFree(buffer);
ret = XGetWindowProperty(
x_display,
fake_window,
event.xselection.property,
0,
(long)pty_size,
True,
AnyPropertyType,
&pty_type,
&pty_format,
&pty_items,
&pty_size,
&buffer
);
if (ret != Success) goto no_new_sel;
pty_size = (pty_format>>3) * pty_items;
x_clear_clipboard(); x_clear_clipboard();
if (type_atom == x_utf8_string_atom) { if (type_atom == x_utf8_string_atom) {
@ -3020,12 +2985,12 @@ struct graphics_driver x_driver = {
x_init_device, x_init_device,
x_shutdown_device, x_shutdown_device,
x_shutdown_driver, x_shutdown_driver,
NULL, NULL, /* emergency_shutdown */
x_after_fork, x_after_fork,
x_get_driver_param, x_get_driver_param,
x_get_af_unix_name, x_get_af_unix_name,
NULL, NULL, /* get_margin */
NULL, NULL, /* set_margin */
x_get_empty_bitmap, x_get_empty_bitmap,
x_register_bitmap, x_register_bitmap,
x_prepare_strip, x_prepare_strip,
@ -3037,7 +3002,9 @@ struct graphics_driver x_driver = {
x_draw_hline, x_draw_hline,
x_draw_vline, x_draw_vline,
x_scroll, x_scroll,
NULL, NULL, /* set_clip_area */
NULL, /* start_draw */
NULL, /* end_draw */
x_flush, x_flush,
NULL, /* block */ NULL, /* block */
NULL, /* unblock */ NULL, /* unblock */