|
|
|
|
@ -110,9 +110,8 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
y := g_object_get_data(hwd,"gtk_layout_y");
|
|
|
|
|
w := g_object_get_data(hwd,"gtk_layout_width");
|
|
|
|
|
h := g_object_get_data(hwd,"gtk_layout_height");
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(hwd,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
gtk_window_move(hwd,x,max(0,y-pcd));
|
|
|
|
|
pcd := gtk_object_get_data_title_height(hwd);
|
|
|
|
|
gtk_window_move(hwd,x,max(0,y-pcd));
|
|
|
|
|
if w>=0 and h>=0 then
|
|
|
|
|
begin
|
|
|
|
|
//gtk_window_set_default_size(hwd,w,max(0,h-pcd));
|
|
|
|
|
@ -248,8 +247,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
if h then
|
|
|
|
|
begin
|
|
|
|
|
x0 := g_object_get_data(h,"gtk_layout_width");
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(h,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := gtk_object_get_data_title_height(h);
|
|
|
|
|
y0 := g_object_get_data(h,"gtk_layout_height")-pcd;
|
|
|
|
|
end
|
|
|
|
|
rec := array(0,0,x0, max(0,y0));
|
|
|
|
|
@ -261,8 +259,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
ClientToScreen(hwnd,xy);
|
|
|
|
|
h := g_object_get_data(hwnd,"gtk_layout_height");
|
|
|
|
|
w := g_object_get_data(hwnd,"gtk_layout_width");
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(hwnd,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := gtk_object_get_data_title_height(hwnd);
|
|
|
|
|
rec := array(xy[0],xy[1],xy[0]+w,max(0,xy[1]+h-pcd));
|
|
|
|
|
end
|
|
|
|
|
function GetWindowInfo(hwnd :pointer;f:pointer):integer;
|
|
|
|
|
@ -273,7 +270,6 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
function SetWindowPos(h:pointer;hWndInsertAfter:pointer; X:integer; Y:integer; cx:integer;cy:integer; uFlags:integer);
|
|
|
|
|
begin
|
|
|
|
|
//echo "\r\nset window pos:" ,x,"===",y,"=<>=",cx,"===",cy;
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
if 0x400 .& uFlags then
|
|
|
|
|
begin
|
|
|
|
|
//echo "border set \r\n";
|
|
|
|
|
@ -283,7 +279,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
if not(h>0 or h<0) then return ;
|
|
|
|
|
flg := 0;
|
|
|
|
|
wt := static gtk_window_get_type();
|
|
|
|
|
pcd := gtk_object_get_data(h,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := gtk_object_get_data_title_height(h);
|
|
|
|
|
if g_type_check_instance_is_a(h,wt) then //主窗口
|
|
|
|
|
begin
|
|
|
|
|
x0 := g_object_get_data(h,"gtk_layout_x");
|
|
|
|
|
@ -299,33 +295,6 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
h0 := g_object_get_data(h,"gtk_layout_height");
|
|
|
|
|
if (cx>=0 and cy>=0) and ( cx<>w0 or cy<>h0) then
|
|
|
|
|
begin
|
|
|
|
|
{if gtk_window_get_resizable(h) then
|
|
|
|
|
begin
|
|
|
|
|
gtk_widget_get_size_request(h,cx0,cy0); //改小一点
|
|
|
|
|
if cx0>cx or cy0>cy then
|
|
|
|
|
begin
|
|
|
|
|
gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
|
|
|
|
end
|
|
|
|
|
//gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
|
|
|
|
//gtk_window_set_default_size(h,cx,max(0,cy-pcd));
|
|
|
|
|
//echo "\r\nresize:",cx,"===",cy;
|
|
|
|
|
//gtk_window_resize(h,cx,max(0,cy-pcd));
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
begin
|
|
|
|
|
//gtk_widget_get_size_request(h,cx0,cy0);
|
|
|
|
|
//echo "\r\noldsize:",cx0,"====",cy0;
|
|
|
|
|
//
|
|
|
|
|
gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
|
|
|
|
//gtk_window_resize(wh,cx,max(0,cy-pcd));
|
|
|
|
|
//gtk_window_set_default_size(h,cx,max(0,cy-pcd));
|
|
|
|
|
//gtk_window_set_decorated(h,true);
|
|
|
|
|
//gtk_window_set_resizable(h,true);
|
|
|
|
|
|
|
|
|
|
//gtk_window_resize(h,cx,cy);
|
|
|
|
|
//gtk_window_set_decorated(h,false);
|
|
|
|
|
//gtk_window_resize_to_geometry(h,cx,cy);
|
|
|
|
|
end }
|
|
|
|
|
if gtk_window_get_resizable(h) then
|
|
|
|
|
begin
|
|
|
|
|
gtk_widget_set_size_request(h,1,1);
|
|
|
|
|
@ -391,13 +360,25 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
if (not gtk_widget_is_toplevel(pt)) then
|
|
|
|
|
begin
|
|
|
|
|
pt := gtk_widget_get_toplevel(pt);
|
|
|
|
|
end
|
|
|
|
|
gtk_window_set_type_hint((dialog),0);
|
|
|
|
|
gtk_window_set_modal(GTK_WINDOW( dialog),TRUE); //屏蔽掉showmodal
|
|
|
|
|
end
|
|
|
|
|
//gtk_window_set_type_hint((dialog),0);
|
|
|
|
|
//gtk_window_set_modal(GTK_WINDOW( dialog),TRUE); //屏蔽掉showmodal
|
|
|
|
|
gtk_window_set_transient_for( GTK_WINDOW(dialog),GTK_WINDOW(pt));
|
|
|
|
|
//gtk_widget_set_sensitive(pt,false);
|
|
|
|
|
//w.Visible := true;
|
|
|
|
|
gtk_widget_show(dialog);
|
|
|
|
|
g_object_set_data(dialog,"is_show_modaling",true);
|
|
|
|
|
pts := array();
|
|
|
|
|
while pt do //获取有效的有效的父窗口
|
|
|
|
|
begin
|
|
|
|
|
if gtk_widget_get_sensitive(pt) then
|
|
|
|
|
begin
|
|
|
|
|
gtk_widget_set_sensitive(pt,false);
|
|
|
|
|
pts[length(pts)] := pt;
|
|
|
|
|
pt := gtk_window_get_transient_for(pt);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
g_object_set_data(dialog,"modaling_top_parent",pts);
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
@ -406,17 +387,20 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
dialog := w.handle;
|
|
|
|
|
if not g_object_get_data(dialog,"is_show_modaling") then return ;
|
|
|
|
|
g_object_set_data(dialog,"is_show_modaling",false);
|
|
|
|
|
pt := GetParent(dialog);
|
|
|
|
|
if (pt) then
|
|
|
|
|
//pt := GetParent(dialog);
|
|
|
|
|
gtk_window_set_transient_for( GTK_WINDOW(dialog),0);
|
|
|
|
|
//gtk_window_set_modal(GTK_WINDOW( dialog),false); //屏蔽掉showmodal
|
|
|
|
|
w.Visible := false;
|
|
|
|
|
gtk_widget_hide(dialog);
|
|
|
|
|
pts := g_object_get_data(dialog,"modaling_top_parent");
|
|
|
|
|
if (pts) then
|
|
|
|
|
begin
|
|
|
|
|
if (not gtk_widget_is_toplevel(pt)) then
|
|
|
|
|
g_object_set_data(dialog,"modaling_top_parent",0);
|
|
|
|
|
|
|
|
|
|
for i,pt in pts do
|
|
|
|
|
begin
|
|
|
|
|
pt := gtk_widget_get_toplevel(pt);
|
|
|
|
|
end
|
|
|
|
|
gtk_window_set_modal(GTK_WINDOW( dialog),false); //屏蔽掉showmodal
|
|
|
|
|
gtk_window_set_transient_for( GTK_WINDOW(dialog),0);
|
|
|
|
|
//w.Visible := false;
|
|
|
|
|
gtk_widget_hide(dialog);
|
|
|
|
|
gtk_widget_set_sensitive(pt,true);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
function GetParent(h); //获得父窗口
|
|
|
|
|
@ -540,8 +524,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
end
|
|
|
|
|
if SizeChanged then //这个是不是应该放前面
|
|
|
|
|
begin
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(h,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := gtk_object_get_data_title_height(h);
|
|
|
|
|
gtk_widgetsizechanged(h,max(0,AHeight-pcd),AWidth);
|
|
|
|
|
end
|
|
|
|
|
{if SizeChanged then
|
|
|
|
|
@ -730,7 +713,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
h := g_object_get_data(hwnd,"gtk_clientwideget");
|
|
|
|
|
if h then
|
|
|
|
|
begin
|
|
|
|
|
//return gtk_widget_queue_draw(h);
|
|
|
|
|
return gtk_widget_queue_draw(h);
|
|
|
|
|
if ifarray(rec) and ifnumber(rec[0]) and ifnumber(rec[1]) and ifnumber(rec[2]) and ifnumber(rec[3]) then
|
|
|
|
|
begin
|
|
|
|
|
gtk_widget_queue_draw_area(h,rec[0],rec[1],rec[2]-rec[0],rec[3]-rec[1]);
|
|
|
|
|
@ -900,13 +883,16 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
gtk_rgb_color_rgb(gtk_object_get_data(hdc,"font.bkcolor"),bkr,bkg,bkb);
|
|
|
|
|
//cairo_fill
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
////////////////////////////////////////////////////////
|
|
|
|
|
if udl then
|
|
|
|
|
begin
|
|
|
|
|
cairo_set_line_width(hdc,0.4);
|
|
|
|
|
end
|
|
|
|
|
if bytetype(txt,tlen)=1 then //字符类型判断
|
|
|
|
|
begin
|
|
|
|
|
tlen-=1;
|
|
|
|
|
end
|
|
|
|
|
txts := array();
|
|
|
|
|
txtidx := 0;
|
|
|
|
|
txti := "";
|
|
|
|
|
@ -956,8 +942,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
cairo_move_to(hdc,xx,yy);
|
|
|
|
|
cairo_show_text(hdc,TslStringToGtk(v0));
|
|
|
|
|
cairo_stroke(hdc);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
return 1;
|
|
|
|
|
while idx<=tlen do
|
|
|
|
|
begin
|
|
|
|
|
@ -1232,7 +1217,10 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
end
|
|
|
|
|
function SetActiveWindow(h);
|
|
|
|
|
begin
|
|
|
|
|
hh := gtk_widget_get_toplevel(h);
|
|
|
|
|
if not IsGtkWidget(h) then return 0;
|
|
|
|
|
if gtk_widget_is_toplevel(h) then hh := h;
|
|
|
|
|
else
|
|
|
|
|
hh := gtk_widget_get_toplevel(h);
|
|
|
|
|
if hh then gtk_window_present(hh);
|
|
|
|
|
end
|
|
|
|
|
function CreatePen(FS,w,FC); //gtk 模拟 pen
|
|
|
|
|
@ -1340,8 +1328,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
begin
|
|
|
|
|
h :=g_object_get_data(hwd,"gtk_layout_height");
|
|
|
|
|
w :=g_object_get_data(hwd,"gtk_layout_width");
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(hwnd,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := gtk_object_get_data_title_height(hwnd);
|
|
|
|
|
gtk_widgetsizechanged(hwd,max(0,h-pcd),w);
|
|
|
|
|
end
|
|
|
|
|
Function SetMenu(hwd:pointer;hmenu:pointer):integer; //设置菜单栏
|
|
|
|
|
@ -1379,8 +1366,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
end
|
|
|
|
|
h :=g_object_get_data(hwd,"gtk_layout_height");
|
|
|
|
|
w :=g_object_get_data(hwd,"gtk_layout_width");
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(hwnd,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := gtk_object_get_data_title_height(hwnd);
|
|
|
|
|
gtk_widgetsizechanged(hwd,max(0,h-pcd),w);
|
|
|
|
|
//移除原有窗口
|
|
|
|
|
//menubar 添加到窗口
|
|
|
|
|
@ -1429,61 +1415,28 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
function ClientToScreen(hwnd :pointer;var p:array of integer):integer; // 继续努力
|
|
|
|
|
begin
|
|
|
|
|
if not hwnd then return ;
|
|
|
|
|
if not GTK_WIDGET(hwnd) then return ;
|
|
|
|
|
if {gdk_backend_is_wayland()} true then
|
|
|
|
|
begin
|
|
|
|
|
p1 := g_object_get_data(hwnd,"motion_xy");
|
|
|
|
|
if ifarray(p1) then
|
|
|
|
|
begin
|
|
|
|
|
dx := p1["x_r"]-p1["x"];
|
|
|
|
|
dy := p1["y_r"]-p1["y"];
|
|
|
|
|
p[0]+=dx;
|
|
|
|
|
p[1]+=dy;
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
x := g_object_get_data(hwnd,"gtk_layout_x");
|
|
|
|
|
y := g_object_get_data(hwnd,"gtk_layout_y");
|
|
|
|
|
p[0]+=x;
|
|
|
|
|
p[1]+=y;
|
|
|
|
|
if not gtk_widget_is_toplevel(hwnd) then
|
|
|
|
|
if not IsGtkWidget(hwnd) then return ;
|
|
|
|
|
p1 := g_object_get_data(hwnd,"motion_xy");
|
|
|
|
|
if ifarray(p1) then
|
|
|
|
|
begin
|
|
|
|
|
phwnd := GetParent(hwnd);
|
|
|
|
|
return ClientToScreen(phwnd,p);
|
|
|
|
|
end else
|
|
|
|
|
begin
|
|
|
|
|
mb := g_object_get_data(hwnd,"menubar");
|
|
|
|
|
if mb and gtk_widget_is_visible(mb) then
|
|
|
|
|
begin
|
|
|
|
|
rec := zeros(4);
|
|
|
|
|
gtk_widget_get_allocation(mb,rec);
|
|
|
|
|
if rec[3]>1 then
|
|
|
|
|
begin
|
|
|
|
|
p[1]+= rec[3] ;//max(rec[3],25);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
dx := p1["x_r"]-p1["x"];
|
|
|
|
|
dy := p1["y_r"]-p1["y"];
|
|
|
|
|
p[0]+=dx;
|
|
|
|
|
p[1]+=dy;
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
function ScreenToClient(hwnd :pointer;var p:array of integer):integer;// 继续努力
|
|
|
|
|
begin
|
|
|
|
|
if {gdk_backend_is_wayland()}true then
|
|
|
|
|
begin
|
|
|
|
|
p1 := g_object_get_data(hwnd,"motion_xy");
|
|
|
|
|
if ifarray(p1) then
|
|
|
|
|
begin
|
|
|
|
|
dx := p1["x_r"]-p1["x"];
|
|
|
|
|
dy := p1["y_r"]-p1["y"];
|
|
|
|
|
p[0]-=dx;
|
|
|
|
|
p[1]-=dy;
|
|
|
|
|
end
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
p1 := array(0,0);
|
|
|
|
|
ClientToScreen(hwnd,p1);
|
|
|
|
|
p[0]-=p1[0];
|
|
|
|
|
p[1]-=p1[1];
|
|
|
|
|
p1 := g_object_get_data(hwnd,"motion_xy");
|
|
|
|
|
if ifarray(p1) then
|
|
|
|
|
begin
|
|
|
|
|
dx := p1["x_r"]-p1["x"];
|
|
|
|
|
dy := p1["y_r"]-p1["y"];
|
|
|
|
|
p[0]-=dx;
|
|
|
|
|
p[1]-=dy;
|
|
|
|
|
end
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
function BeginPaint(hwd :pointer;strc:pointer):pointer;
|
|
|
|
|
@ -2153,8 +2106,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
begin
|
|
|
|
|
w :=g_object_get_data(hwnd,"gtk_layout_width");
|
|
|
|
|
h := g_object_get_data(hwnd,"gtk_layout_height");
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
pcd := gtk_object_get_data(hwnd,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd :=gtk_object_get_data_title_height(hwnd);
|
|
|
|
|
gtk_widgetsizechanged(hwnd,max(0,h-pcd),w);
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
@ -3032,10 +2984,17 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
return 1;
|
|
|
|
|
end
|
|
|
|
|
function GetCaretBlinkTime():integer;
|
|
|
|
|
begin
|
|
|
|
|
begin
|
|
|
|
|
global g_Caret_Blink_Time;
|
|
|
|
|
return g_Caret_Blink_Time;
|
|
|
|
|
end
|
|
|
|
|
function SetCaretBlinkTime(uMSeconds :integer):integer;
|
|
|
|
|
begin
|
|
|
|
|
begin
|
|
|
|
|
global g_Caret_Blink_Time;
|
|
|
|
|
if uMSeconds>100 and uMSeconds<> g_Caret_Blink_Time then
|
|
|
|
|
begin
|
|
|
|
|
g_Caret_Blink_Time := integer(uMSeconds);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
Function WinExec(lpCmdLine:string;nCmdShow:integer):integer;
|
|
|
|
|
begin
|
|
|
|
|
@ -3049,6 +3008,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
end
|
|
|
|
|
function BringWindowToTop(hwd :pointer);
|
|
|
|
|
begin
|
|
|
|
|
SetActiveWindow(hwd);
|
|
|
|
|
end
|
|
|
|
|
function GetWindowHandleByPID();
|
|
|
|
|
begin
|
|
|
|
|
@ -3059,6 +3019,7 @@ type tsgtkapi = class(tgtkapis)
|
|
|
|
|
end
|
|
|
|
|
function ForegroundWindow(hwnd);
|
|
|
|
|
begin
|
|
|
|
|
SetActiveWindow(hwd);
|
|
|
|
|
end
|
|
|
|
|
//socket
|
|
|
|
|
function socket(af:integer;tp:integer;protocol:integer):pointer;begin end
|
|
|
|
|
@ -3212,6 +3173,11 @@ type tgtkapis = class() //gtk
|
|
|
|
|
gtk_object_data_values_global[inttostr(h),n] := v;
|
|
|
|
|
//echo tostn(gtk_object_data_values_global);
|
|
|
|
|
end
|
|
|
|
|
function gtk_object_get_data_title_height(h); //获取标题栏高度
|
|
|
|
|
begin
|
|
|
|
|
global g_w_c_width;
|
|
|
|
|
return gtk_object_get_data(h,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
end
|
|
|
|
|
function gtk_object_get_data(h,n); //获得数据
|
|
|
|
|
begin
|
|
|
|
|
if not(h>0 or h<0) then return 0;
|
|
|
|
|
@ -3414,20 +3380,22 @@ type tgtkapis = class() //gtk
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
function TslStringToGtk(s); //ascii转utf8
|
|
|
|
|
function TslStringToGtk2(s); //ascii转utf8
|
|
|
|
|
begin
|
|
|
|
|
return ansitoutf8(s);
|
|
|
|
|
end
|
|
|
|
|
function TslStringToGtk2(s); //ascii转utf8
|
|
|
|
|
begin
|
|
|
|
|
function TslStringToGtk(s); //ascii转utf8
|
|
|
|
|
begin
|
|
|
|
|
return ansitoutf8(s);
|
|
|
|
|
global g_ansi_unit_cache ;
|
|
|
|
|
if not ifarray(g_ansi_unit_cache) then g_ansi_unit_cache := array();
|
|
|
|
|
r := g_ansi_unit_cache[s];
|
|
|
|
|
if ifnil(r) then
|
|
|
|
|
begin
|
|
|
|
|
r := ansitoutf8(s);
|
|
|
|
|
g_ansi_unit_cache[s] := r;;
|
|
|
|
|
g_ansi_unit_cache[s] := 1;
|
|
|
|
|
//echo "\r\ntrans:",length(trim(s))," ",r;//" >>",s;
|
|
|
|
|
end
|
|
|
|
|
return ansitoutf8(s);
|
|
|
|
|
return r;
|
|
|
|
|
end
|
|
|
|
|
function GtkStringToTsl(s); //ascii转utf8
|
|
|
|
|
@ -4329,6 +4297,12 @@ type tgtkapis = class() //gtk
|
|
|
|
|
_f_ := static procedure(w:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(w);
|
|
|
|
|
end
|
|
|
|
|
procedure gtk_widget_queue_resize_no_redraw(w:pointer);
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static procedure(w:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(w);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
procedure gtk_widget_queue_draw_area(w:pointer;x:integer;y:integer;wd:integer;ht:integer);
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static procedure(w:pointer;x:integer;y:integer;wd:integer;ht:integer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
@ -4975,7 +4949,7 @@ type tgtkapis = class() //gtk
|
|
|
|
|
end
|
|
|
|
|
return ##_f_(w,p);
|
|
|
|
|
end
|
|
|
|
|
function gtk_window_get_transient_for(w:pointer);
|
|
|
|
|
function gtk_window_get_transient_for(w:pointer):pointer;
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static function(w:pointer;p:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(w,p);
|
|
|
|
|
@ -5680,6 +5654,11 @@ type tgtkapis = class() //gtk
|
|
|
|
|
_f_ := static function(instance:pointer; detailed_signal:string; c_handler:pointer;data:pointer;dd:pointer;f:integer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(instance,detailed_signal,c_handler,data,dd,f);
|
|
|
|
|
end
|
|
|
|
|
procedure g_signal_handler_disconnect(instance:pointer;id:integer);
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static procedure(instance:pointer;id:integer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(instance,id);
|
|
|
|
|
end
|
|
|
|
|
function g_signal_new(signal_name:string;itype:pointer;signal_flags:integer;class_offset:integer;accumulator:pointer;accu_data:pointer;c_marshaller:pointer;return_type:pointer;n_params:integer;p1:pointer;p2:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static function(signal_name:string;itype:pointer;signal_flags:integer;class_offset:integer;accumulator:pointer;accu_data:pointer;c_marshaller:pointer;return_type:pointer;n_params:integer;p1:pointer;p2:pointer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
@ -5715,6 +5694,10 @@ type tgtkapis = class() //gtk
|
|
|
|
|
_f_ := static function(lev:integer):pointer; cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(lev);
|
|
|
|
|
end
|
|
|
|
|
function gdk_backend_is_wayland(); //wayland 判断
|
|
|
|
|
begin
|
|
|
|
|
return static is_wayland();
|
|
|
|
|
end
|
|
|
|
|
procedure gdk_window_set_back_pixmap(window:pointer;pixmap:pointer;parent_relative:integer);
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static procedure(window:pointer;pixmap:pointer;parent_relative:integer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
@ -6743,9 +6726,6 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
begin
|
|
|
|
|
_const := getwin32const();
|
|
|
|
|
_wapi := gettswin32api();
|
|
|
|
|
//FMousemoveernotify := new tenterouterlist(_wapi);
|
|
|
|
|
//FMousemoveernotify.Mousemovecall := thisfunction(widgetmousemovecall);
|
|
|
|
|
//FMousemoveernotify.Mousehittest := thisfunction(widgetmousehit);
|
|
|
|
|
FsysCursors := array();
|
|
|
|
|
FsysCursors[0] := _wapi.gdk_cursor_new(2);
|
|
|
|
|
FsysCursors[1] := _wapi.gdk_cursor_new(70);
|
|
|
|
|
@ -6802,7 +6782,6 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
if (msg = _const.WM_SYSCOMMAND and w = 0xF012) or (msg = _const.WM_NCLBUTTONDOWN and w= _const.HTCAPTION) then //WM_NCLBUTTONDOWN
|
|
|
|
|
begin
|
|
|
|
|
Fsyscommand0x12 := true;
|
|
|
|
|
//FMousemoveernotify.lock();
|
|
|
|
|
h := handle;
|
|
|
|
|
x := _wapi.g_object_get_data(h,"gtk_layout_x");
|
|
|
|
|
y := _wapi.g_object_get_data(h,"gtk_layout_y");
|
|
|
|
|
@ -7088,7 +7067,6 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
if FHitwidgetposition in array(10,11,12,15) then
|
|
|
|
|
begin
|
|
|
|
|
FHitwidgetposition += 100;
|
|
|
|
|
//FMousemoveernotify.lock();
|
|
|
|
|
h := handle;
|
|
|
|
|
xy := array(0,0);
|
|
|
|
|
_wapi.GetCursorPos(xy);
|
|
|
|
|
@ -7598,7 +7576,6 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
begin
|
|
|
|
|
FHitwidgetposition := 0;
|
|
|
|
|
Fsyscommand0x12info := nil;
|
|
|
|
|
//FMousemoveernotify.unlock();
|
|
|
|
|
//return ;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
@ -7627,20 +7604,14 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
begin
|
|
|
|
|
Fsyscommand0x12 := false;
|
|
|
|
|
Fsyscommand0x12info := nil;
|
|
|
|
|
//FMousemoveernotify.unlock();
|
|
|
|
|
//return ;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
case mn of
|
|
|
|
|
GS_VISIBILITY_NOTIFY_EVENT:
|
|
|
|
|
begin
|
|
|
|
|
echo "visb:";
|
|
|
|
|
end
|
|
|
|
|
GS_DESTROY:
|
|
|
|
|
begin
|
|
|
|
|
//FMousemoveernotify.unlock();
|
|
|
|
|
Fsyscommand0x12 := 0;
|
|
|
|
|
Fsyscommand0x12info := nil;
|
|
|
|
|
FHitwidgetposition := 0;
|
|
|
|
|
@ -7743,7 +7714,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
if FHandle=0 then return 0;
|
|
|
|
|
for i,lnid in FConnectNameIds do
|
|
|
|
|
begin
|
|
|
|
|
g_signal_handler_disconnect(FHandle,lnid);
|
|
|
|
|
_wapi.g_signal_handler_disconnect(FHandle,lnid);
|
|
|
|
|
end
|
|
|
|
|
FConnectNameIds := array();
|
|
|
|
|
FConnectHandlers := array();
|
|
|
|
|
@ -7771,24 +7742,6 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
end
|
|
|
|
|
return r;
|
|
|
|
|
end
|
|
|
|
|
function getsignalmap();virtual;
|
|
|
|
|
begin
|
|
|
|
|
return array(
|
|
|
|
|
"destroy":"tsl_gtk_destroy_event", //销毁
|
|
|
|
|
"activate":"tsl_gtk_activate_event", //活动
|
|
|
|
|
"clicked":"tsl_gtk_clicked_event", //点击
|
|
|
|
|
"value-changed":"tsl_gtk_adj_value_changed_event", //值改变
|
|
|
|
|
"delete-event":"tsl_gtk_delete_event", //删除
|
|
|
|
|
//"day-selected":"tsl_gtk_day_select_event", //日历选择
|
|
|
|
|
"changed" :"tsl_gtk_changed_event", //改变
|
|
|
|
|
"preedit-changed":"tsl_gtk_preedit_changed_event" ,
|
|
|
|
|
"activate-default":"tsl_gtk_activate_default_event_cb" ,
|
|
|
|
|
GS_WINDOW_STATE_EVENT:"tsl_gtk_window_state_event" ,
|
|
|
|
|
GS_FOCUS:"tsl_gtk_focus_event",
|
|
|
|
|
GS_FOCUS_IN_EVENT:"tsl_gtk_focus_in_event" ,
|
|
|
|
|
GS_FOCUS_OUT_EVENT:"tsl_gtk_focus_out_event"
|
|
|
|
|
);
|
|
|
|
|
end
|
|
|
|
|
function Connect(n,f); //连接消息
|
|
|
|
|
begin
|
|
|
|
|
//删除connect
|
|
|
|
|
@ -7802,18 +7755,15 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
begin
|
|
|
|
|
//echo "\r\n========================remove connect:",n;
|
|
|
|
|
reindex(FConnectNameIds,array(ln:nil));
|
|
|
|
|
g_signal_handler_disconnect(FHandle,lnid);
|
|
|
|
|
_wapi.g_signal_handler_disconnect(FHandle,lnid);
|
|
|
|
|
end
|
|
|
|
|
//echo "\r\nconnect ===========================",FHandle,"=====",n;
|
|
|
|
|
|
|
|
|
|
eid := GetGtkEventNameOrId(ln);
|
|
|
|
|
//fn := (getsignalmap())[ln];
|
|
|
|
|
//if not(fn and ifstring(fn)) then fn := "tsl_gtk_normal_event_cb";
|
|
|
|
|
//lnid := g_signal_connect_data(FHandle, ln, gettslvcleventhandler_(fn), eid,nil,0);
|
|
|
|
|
ptr := get_fptr_by_sigal_name(n);
|
|
|
|
|
if ptr then
|
|
|
|
|
begin
|
|
|
|
|
lnid := g_signal_connect_data(FHandle, ln, ptr, eid,nil,0);
|
|
|
|
|
lnid := _wapi.g_signal_connect_data(FHandle, ln, ptr, eid,nil,0);
|
|
|
|
|
FConnectNameIds[ln] := lnid;
|
|
|
|
|
FConnectHandlers[inttostr(eid)] := f;
|
|
|
|
|
end else
|
|
|
|
|
@ -7948,27 +7898,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
static _wapi;
|
|
|
|
|
static _const;
|
|
|
|
|
private
|
|
|
|
|
FHandle;
|
|
|
|
|
function gtk_widget_get_type():pointer;
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_();
|
|
|
|
|
end
|
|
|
|
|
procedure g_signal_handler_disconnect(instance:pointer;id:integer);
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static procedure(instance:pointer;id:integer);cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(instance,id);
|
|
|
|
|
end
|
|
|
|
|
function g_signal_connect_data(instance:pointer; detailed_signal:string; c_handler:pointer;data:pointer;dd:pointer;f:integer):pointer;
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static function(instance:pointer; detailed_signal:string; c_handler:pointer;data:pointer;dd:pointer;f:integer):pointer;cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(instance,detailed_signal,c_handler,data,dd,f);
|
|
|
|
|
end
|
|
|
|
|
function g_signal_new(signal_name:string;itype:pointer;signal_flags:integer;class_offset:integer;accumulator:pointer;accu_data:pointer;c_marshaller:pointer;return_type:pointer;n_params:integer;p1:pointer;p2:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static function(signal_name:string;itype:pointer;signal_flags:integer;class_offset:integer;accumulator:pointer;accu_data:pointer;c_marshaller:pointer;return_type:pointer;n_params:integer;p1:pointer;p2:pointer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
return ##_f_(signal_name,itype,signal_flags,class_offset,accumulator,accu_data,c_marshaller,return_type,n_params,p1,p2);
|
|
|
|
|
end
|
|
|
|
|
FHandle;
|
|
|
|
|
FConnectNameIds;
|
|
|
|
|
FConnectHandlers;
|
|
|
|
|
FValues;
|
|
|
|
|
@ -8001,9 +7931,9 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
//wm-user
|
|
|
|
|
if FinitNewSignaled then return ;
|
|
|
|
|
FinitNewSignaled := true;
|
|
|
|
|
for i,v in array(gtk_widget_get_type()) do
|
|
|
|
|
for i,v in array(_wapi.gtk_widget_get_type()) do
|
|
|
|
|
begin
|
|
|
|
|
g_signal_new("wm-user",
|
|
|
|
|
_wapi.g_signal_new("wm-user",
|
|
|
|
|
v,
|
|
|
|
|
2,
|
|
|
|
|
0,
|
|
|
|
|
@ -8036,7 +7966,6 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|
|
|
|
begin
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
//static FMousemoveernotify;
|
|
|
|
|
class function getfimobj();
|
|
|
|
|
begin
|
|
|
|
|
if not FImobj then FImobj := new tgtk_im_object(nil);
|
|
|
|
|
@ -8070,16 +7999,6 @@ type tgtk_im_object = class(tgtk_ctl_object)
|
|
|
|
|
Connect(v,f);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
function getsignalmap();override;
|
|
|
|
|
begin
|
|
|
|
|
return array(
|
|
|
|
|
"preedit-start":"do_two_param_event" ,
|
|
|
|
|
"preedit-changed":"do_two_param_event" ,
|
|
|
|
|
"preedit-surrounding":"do_two_param_event" ,
|
|
|
|
|
"preedit-end":"do_two_param_event" ,
|
|
|
|
|
"commit":"tsl_gtk_normal_event_cb"
|
|
|
|
|
);
|
|
|
|
|
end
|
|
|
|
|
function GtkEventDispatch(a,mn,c,d);override; //根据名称处理gtk消息
|
|
|
|
|
begin
|
|
|
|
|
case mn of
|
|
|
|
|
@ -8100,6 +8019,11 @@ type tgtk_im_object = class(tgtk_ctl_object)
|
|
|
|
|
function GtkBaseEventName();override; //绑定的消息
|
|
|
|
|
begin
|
|
|
|
|
return array("commit");//,"preedit-changed","preedit-end","preedit-start","retrieve-surrounding");//"commit","delete-surrounding",
|
|
|
|
|
//"preedit-start":"do_two_param_event" ,
|
|
|
|
|
// "preedit-changed":"do_two_param_event" ,
|
|
|
|
|
// "preedit-surrounding":"do_two_param_event" ,
|
|
|
|
|
// "preedit-end":"do_two_param_event" ,
|
|
|
|
|
// "commit":"tsl_gtk_normal_event_cb"
|
|
|
|
|
end
|
|
|
|
|
function focusin();//focus in
|
|
|
|
|
begin
|
|
|
|
|
@ -8214,7 +8138,7 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
|
|
|
|
r := zeros(4);
|
|
|
|
|
_wapi.gtk_widget_get_allocation(hd,r);
|
|
|
|
|
cr := _wapi.gdk_cairo_create(_wapi.gtk_widget_get_window(hd));
|
|
|
|
|
rec := zeros(4);
|
|
|
|
|
rec := zeros(4);
|
|
|
|
|
_wapi.gdk_cairo_get_clip_rectangle(cr,rec);
|
|
|
|
|
//echo ">>>1111",tostn(rec);
|
|
|
|
|
//echo ">>>extents:";
|
|
|
|
|
@ -8249,7 +8173,7 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
|
|
|
|
end
|
|
|
|
|
CallTslVclProc(_const.WM_NCPAINT,0,cr); //绘制
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
_wapi.cairo_destroy(cr);
|
|
|
|
|
_wapi.gtk_object_set_data(cr);
|
|
|
|
|
//echo "\r\ntime:",datetimetostr(now()),"===timeuses:",mtoc,"===",hd;
|
|
|
|
|
@ -8549,82 +8473,6 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
|
|
|
|
w := makelong(_const.SB_THUMBTRACK,0);
|
|
|
|
|
CallTslVclProc(_const.WM_VSCROLL,w,0,1);
|
|
|
|
|
end
|
|
|
|
|
{function GtkEventDispatch_(a,mn,c,d);override; //原有的消息处理
|
|
|
|
|
begin
|
|
|
|
|
//消息分发
|
|
|
|
|
if mn="scroll-event" then
|
|
|
|
|
begin
|
|
|
|
|
h := a.handle;
|
|
|
|
|
|
|
|
|
|
nt := now();
|
|
|
|
|
if (nt-(1/24/3600/100))<FScrollT then
|
|
|
|
|
begin
|
|
|
|
|
//return true;
|
|
|
|
|
end
|
|
|
|
|
ed := new _GdkEventScroll(c);
|
|
|
|
|
dr := ed.direction;
|
|
|
|
|
if dr<>0 and dr<>1 then return ;
|
|
|
|
|
x := ed.x_root;
|
|
|
|
|
y := ed.y_root;
|
|
|
|
|
r := array();
|
|
|
|
|
|
|
|
|
|
_wapi.GetTopWidgetList(h,x,y,r);
|
|
|
|
|
lenr := length(r)-1;
|
|
|
|
|
for i := lenr downto 0 do
|
|
|
|
|
begin
|
|
|
|
|
ri := r[i][0];
|
|
|
|
|
rxy := r[i][1];
|
|
|
|
|
fv := _wapi.g_object_get_data(ri,"gtk_window_vscroll_bar");
|
|
|
|
|
if fv and _wapi.gtk_widget_is_visible(fv) then
|
|
|
|
|
begin
|
|
|
|
|
ifdowheel := true;
|
|
|
|
|
break;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if not ifdowheel then
|
|
|
|
|
begin
|
|
|
|
|
ri := r[lenr][0];
|
|
|
|
|
rxy := r[lenr][1];
|
|
|
|
|
end
|
|
|
|
|
if ri and rxy then
|
|
|
|
|
begin
|
|
|
|
|
//if hasMessageFromGtkMessageQueue(-1,_const.LM_MOUSEWHEEL) then return true; //20230417暂时屏蔽
|
|
|
|
|
if hasMessageFromGtkMessageQueue(-1,_const.WM_SIZE) then return true;
|
|
|
|
|
//if hasMessageFromGtkMessageQueue(-1,_const.WM_MOUSEMOVE) then return true;
|
|
|
|
|
WHEEL_DELTA := 120;
|
|
|
|
|
FScrollT := now();
|
|
|
|
|
dr := (dr=1)?(-WHEEL_DELTA):(WHEEL_DELTA);
|
|
|
|
|
whist := feacheasylostMessageFromGtkMessageQueue(ri,_const.LM_MOUSEWHEEL);
|
|
|
|
|
for ii,iiv in whist do
|
|
|
|
|
begin
|
|
|
|
|
iivw := iiv[2];
|
|
|
|
|
lowuperdword(iivw,iivc,iivdir);
|
|
|
|
|
dr+=iivdir;
|
|
|
|
|
end
|
|
|
|
|
if dr=0 then return true;
|
|
|
|
|
|
|
|
|
|
xy := makelong(rxy[0],rxy[1]);
|
|
|
|
|
ctl := 0;
|
|
|
|
|
global g_gtk_buttontable,g_gtk_keytable;
|
|
|
|
|
if ifarray(g_gtk_buttontable) then
|
|
|
|
|
begin
|
|
|
|
|
ctl .|= g_gtk_buttontable[0];
|
|
|
|
|
ctl .|= g_gtk_buttontable[1];
|
|
|
|
|
end
|
|
|
|
|
if ifarray(g_gtk_keytable) then
|
|
|
|
|
begin
|
|
|
|
|
if g_gtk_keytable[0x10] then ctl .|= _const.MK_Shift;
|
|
|
|
|
if g_gtk_keytable[0x11] then ctl .|= _const.MK_Control;
|
|
|
|
|
end
|
|
|
|
|
dr := makelong(ctl,dr);
|
|
|
|
|
//clearMessageFromGtkMessageQueue(ri,_const.LM_MOUSEWHEEL);
|
|
|
|
|
AddMessageToGtkMessageQueue(ri,_const.LM_MOUSEWHEEL,dr,xy,1);
|
|
|
|
|
return true;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
return inherited;
|
|
|
|
|
end }
|
|
|
|
|
private
|
|
|
|
|
ftarget ;
|
|
|
|
|
fscrollinfos;
|
|
|
|
|
@ -8826,7 +8674,7 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|
|
|
|
begin
|
|
|
|
|
//消息分发
|
|
|
|
|
//echo "eventtype:",_wapi.gdk_event_get_event_type(c),"\r\n";
|
|
|
|
|
global g_gtk_shadow_size_nset,g_gtk_shadow_width,g_gtk_shadow_heigt,g_w_c_width;
|
|
|
|
|
global g_gtk_shadow_size_nset,g_gtk_shadow_width,g_gtk_shadow_heigt;
|
|
|
|
|
case mn of
|
|
|
|
|
GS_SHOW:
|
|
|
|
|
begin
|
|
|
|
|
@ -8869,7 +8717,7 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|
|
|
|
Exit;
|
|
|
|
|
end
|
|
|
|
|
if (cx <> AWidth) then _wapi.g_object_set_data(h,"gtk_layout_width",AWidth);
|
|
|
|
|
pcd := _wapi.gtk_object_get_data(h,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
|
|
|
|
pcd := _wapi.gtk_object_get_data_title_height(h);
|
|
|
|
|
if cy <> AHeight then
|
|
|
|
|
begin
|
|
|
|
|
_wapi.g_object_set_data(h,"gtk_layout_height",AHeight+pcd);
|
|
|
|
|
@ -8911,7 +8759,7 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|
|
|
|
else
|
|
|
|
|
begin
|
|
|
|
|
h := _wapi.gtk_window_new(1); //popup
|
|
|
|
|
//_wapi.gtk_window_set_type_hint(h,11); //此处忽略类型
|
|
|
|
|
//_wapi.gtk_window_set_type_hint(h,GDK_WINDOW_TYPE_HINT_MENU); //此处忽略类型
|
|
|
|
|
end
|
|
|
|
|
_wapi.gtk_object_set_data(h,"gtk_wnd_hs_caption",1);
|
|
|
|
|
if not(hascap or srszie) then
|
|
|
|
|
@ -8934,7 +8782,7 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|
|
|
|
_wapi.gtk_window_set_default_size(h,max(1,nWidth),max(1,nheight-pcd)); //顶层窗口采用设default
|
|
|
|
|
if not srszie then
|
|
|
|
|
begin
|
|
|
|
|
if gdk_backend_is_wayland() and hascap then _wapi.g_object_set_data(h,"size_has_shadow",true);
|
|
|
|
|
if _wapi.gdk_backend_is_wayland() and hascap then _wapi.g_object_set_data(h,"size_has_shadow",true);
|
|
|
|
|
_wapi.g_object_set_data(h,"size_last_set",true);
|
|
|
|
|
_wapi.g_object_set_data(h,"size_last_set_value",array(max(1,nWidth),max(1,nheight-pcd)));
|
|
|
|
|
end
|
|
|
|
|
@ -8982,8 +8830,7 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|
|
|
|
_wapi.gtk_widget_show_all(vbox);
|
|
|
|
|
InitContainerList(h); //容器list
|
|
|
|
|
if hwndparent then //设置parent _wapi.SetParent(h,hwndparent);
|
|
|
|
|
begin
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
_wapi.g_object_set_data(h,"gtk_layout_parent",hwndparent);
|
|
|
|
|
if _wapi.gtk_widget_is_toplevel(hwndparent) then trf := hWndParent;
|
|
|
|
|
else
|
|
|
|
|
@ -9014,14 +8861,17 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|
|
|
|
end
|
|
|
|
|
function GSBUTTONRELEASEEVENT(a,b,c,d);override;
|
|
|
|
|
begin
|
|
|
|
|
if not _wapi.gtk_widget_get_sensitive(a.handle) then return true;
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
function GSMOTIONNOTIFYEVENT(a,b,c,d);override;
|
|
|
|
|
begin
|
|
|
|
|
if not _wapi.gtk_widget_get_sensitive(a.handle) then return true;
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
function GSBUTTONPRESSEVENT(a,b,c,d);override;
|
|
|
|
|
begin
|
|
|
|
|
if not _wapi.gtk_widget_get_sensitive(a.handle) then return true;
|
|
|
|
|
return false;
|
|
|
|
|
end
|
|
|
|
|
function cleinteventpress(a,b,c,d);
|
|
|
|
|
@ -9289,25 +9139,7 @@ begin
|
|
|
|
|
end
|
|
|
|
|
function GetGtkEventNameOrId(n); //获得event
|
|
|
|
|
begin
|
|
|
|
|
global G_E_ID_Name_1;
|
|
|
|
|
global G_E_ID_Name_2;
|
|
|
|
|
if not ifarray(G_E_ID_Name_1) then
|
|
|
|
|
begin
|
|
|
|
|
G_E_ID_Name_2 := array();
|
|
|
|
|
G_E_ID_Name_1 := array(
|
|
|
|
|
"wm-user":10,
|
|
|
|
|
"destroy":11,
|
|
|
|
|
"activate":12,
|
|
|
|
|
"clicked":13,
|
|
|
|
|
"value-changed":14,
|
|
|
|
|
"delete-event":15,
|
|
|
|
|
"event":16 ,
|
|
|
|
|
"window-sate-event":17);
|
|
|
|
|
for i,v in G_E_ID_Name_1 do
|
|
|
|
|
begin
|
|
|
|
|
G_E_ID_Name_2[v] := i;
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
global G_E_ID_Name_1,G_E_ID_Name_2;
|
|
|
|
|
if ifstring(n) then
|
|
|
|
|
begin
|
|
|
|
|
ln := lowercase(n);
|
|
|
|
|
@ -9737,6 +9569,7 @@ CAIRO_OPERATOR_HSL_SATURATION:=26;
|
|
|
|
|
CAIRO_OPERATOR_HSL_COLOR:=27;
|
|
|
|
|
CAIRO_OPERATOR_HSL_LUMINOSITY:=28;
|
|
|
|
|
}
|
|
|
|
|
/////////////////////////////非api上面的external 函数///////////////////////////////////////////////////
|
|
|
|
|
function gtk_init_check(argc:string;argcv:string):integer;
|
|
|
|
|
begin
|
|
|
|
|
_f_ := static function(argc:string;argcv:string):integer;cdecl;external getfuncptrbyname(0,functionname());
|
|
|
|
|
@ -9757,11 +9590,29 @@ begin
|
|
|
|
|
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,"gdk_keymap_get_default");
|
|
|
|
|
return ##_f_();
|
|
|
|
|
end
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
|
function igtk();
|
|
|
|
|
begin
|
|
|
|
|
global g_w_i_datas,g_w_c_width, g_gtk_buttontable,g_gtk_keytable,
|
|
|
|
|
g_gtk_call_handler_manager,g_gtk_font_get_size,g_gtk_dragxy,
|
|
|
|
|
g_gtk_shadow_width,g_gtk_shadow_heigt,g_gtk_shadow_size_nset;
|
|
|
|
|
g_gtk_shadow_width,g_gtk_shadow_heigt,g_gtk_shadow_size_nset,
|
|
|
|
|
G_E_ID_Name_1,G_E_ID_Name_2,g_Caret_Blink_Time,g_ansi_unit_cache;
|
|
|
|
|
g_ansi_unit_cache := array();
|
|
|
|
|
G_E_ID_Name_2 := array();
|
|
|
|
|
G_E_ID_Name_1 := array(
|
|
|
|
|
"wm-user":10,
|
|
|
|
|
"destroy":11,
|
|
|
|
|
"activate":12,
|
|
|
|
|
"clicked":13,
|
|
|
|
|
"value-changed":14,
|
|
|
|
|
"delete-event":15,
|
|
|
|
|
"event":16 ,
|
|
|
|
|
"window-sate-event":17);
|
|
|
|
|
for i,v in G_E_ID_Name_1 do
|
|
|
|
|
begin
|
|
|
|
|
G_E_ID_Name_2[v] := i;
|
|
|
|
|
end
|
|
|
|
|
g_Caret_Blink_Time := 800;
|
|
|
|
|
g_gtk_dragxy := array(0,0);
|
|
|
|
|
g_gtk_font_get_size := array();
|
|
|
|
|
gtk_init_check(nil,nil);
|
|
|
|
|
@ -9774,6 +9625,7 @@ begin
|
|
|
|
|
g_gtk_keytable := array(0x10:0,0x11:0,0x12:0);
|
|
|
|
|
g_gtk_call_handler_manager := new tinstancemanager();
|
|
|
|
|
kmp := keymap_get_default();
|
|
|
|
|
if not kmp then return 0;
|
|
|
|
|
signal_connect_data(kmp,"state-changed",g_gtk_call_handler_manager.get(thisfunction(tsl_gtk_keymp_state)),0,0);
|
|
|
|
|
end
|
|
|
|
|
function ugtk();
|
|
|
|
|
@ -9786,25 +9638,14 @@ begin
|
|
|
|
|
global g_gtk_call_handler_manager;
|
|
|
|
|
if not g_gtk_call_handler_manager then return 0;
|
|
|
|
|
mgnr := g_gtk_call_handler_manager;
|
|
|
|
|
fptr := findfunction(fname);
|
|
|
|
|
if fptr then
|
|
|
|
|
return mgnr.get(fptr);
|
|
|
|
|
case fname of
|
|
|
|
|
"tsl_gtk_wmuser_event": return mgnr.get(thisfunction(tsl_gtk_wmuser_event));
|
|
|
|
|
"tsl_gtk_destroy_event": return mgnr.get(thisfunction(tsl_gtk_destroy_event));
|
|
|
|
|
"tsl_gtk_activate_event": return mgnr.get(thisfunction(tsl_gtk_activate_event));
|
|
|
|
|
"tsl_gtk_activate_default_event_cb": return mgnr.get(thisfunction(tsl_gtk_activate_default_event_cb));
|
|
|
|
|
"tsl_gtk_clicked_event": return mgnr.get(thisfunction(tsl_gtk_clicked_event));
|
|
|
|
|
"tsl_gtk_adj_value_changed_event": return mgnr.get(thisfunction(tsl_gtk_adj_value_changed_event));
|
|
|
|
|
"tsl_gtk_delete_event": return mgnr.get(thisfunction(tsl_gtk_delete_event));
|
|
|
|
|
"tsl_gtk_day_select_event": return mgnr.get(thisfunction(tsl_gtk_day_select_event));
|
|
|
|
|
"tsl_gtk_changed_event": return mgnr.get(thisfunction(tsl_gtk_changed_event));
|
|
|
|
|
"tsl_gtk_preedit_changed_event": return mgnr.get(thisfunction(tsl_gtk_preedit_changed_event));
|
|
|
|
|
"do_two_param_event": return mgnr.get(thisfunction(do_two_param_event));
|
|
|
|
|
"tsl_gtk_normal_event_cb": return mgnr.get(thisfunction(tsl_gtk_normal_event_cb));
|
|
|
|
|
"tsl_gtk_normal_event_bc": return mgnr.get(thisfunction(tsl_gtk_normal_event_bc));
|
|
|
|
|
"tsl_gtk_idle": return mgnr.get(thisfunction(tsl_gtk_idle));
|
|
|
|
|
"tsl_gtk_window_state_event": return mgnr.get(thisfunction(tsl_gtk_window_state_event));
|
|
|
|
|
"tsl_gtk_focus_event": return mgnr.get(thisfunction(tsl_gtk_focus_event));
|
|
|
|
|
"tsl_gtk_focus_in_event": return mgnr.get(thisfunction(tsl_gtk_focus_in_event));
|
|
|
|
|
"tsl_gtk_focus_out_event": return mgnr.get(thisfunction(tsl_gtk_focus_out_event));
|
|
|
|
|
end ;
|
|
|
|
|
end
|
|
|
|
|
function get_instance_i(fn);
|
|
|
|
|
@ -9825,6 +9666,7 @@ procedure tsl_gtk_keymp_state(kmp:pointer;d:pointer);
|
|
|
|
|
begin
|
|
|
|
|
global g_gtk_keytable;
|
|
|
|
|
g_gtk_keytable := array(0x10:0,0x11:0,0x12:0);
|
|
|
|
|
if not kmp then return ;
|
|
|
|
|
state := keymap_get_modifier_state(kmp);
|
|
|
|
|
if state>0 then
|
|
|
|
|
begin
|
|
|
|
|
@ -9855,7 +9697,6 @@ begin
|
|
|
|
|
end
|
|
|
|
|
function c_g_e_visibility_notify_event(w:pointer;e:pointer;u_d:pointer):integer; //
|
|
|
|
|
begin
|
|
|
|
|
echo ">>>visibility_notify_event:";
|
|
|
|
|
return false;
|
|
|
|
|
//return do_two_param_event(a, "value-changed");
|
|
|
|
|
end
|
|
|
|
|
@ -9863,7 +9704,6 @@ function c_g_e_value_changed(a:pointer;b:pointer):integer; //tsl_gtk_adj_value_
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "value-changed");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function c_g_e_destroy(a:pointer; b:pointer;c:pointer):integer; //tsl_gtk_destroy_event
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(a,b,c);
|
|
|
|
|
@ -9937,25 +9777,6 @@ function c_g_e_activate(a:pointer;b:pointer):integer; //tsl_gtk_activate_event
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "activate");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
|
function tsl_gtk_window_state_event(w:pointer;state:pointer;user_data:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(w,GetGtkEventNameOrId("window-state-event"),state);
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_focus_event(w:pointer;state:pointer;user_data:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(w,GetGtkEventNameOrId("focus"),state);
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_focus_in_event(w:pointer;state:pointer;user_data:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(w,GetGtkEventNameOrId("focus-in-event"),state);
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_focus_out_event(w:pointer;state:pointer;user_data:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(w,GetGtkEventNameOrId("focus-out-event"),state);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function tsl_gtk_idle(dlg:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkidledo_(dlg);
|
|
|
|
|
@ -9969,61 +9790,13 @@ begin
|
|
|
|
|
return _gtkeventcall_(a,c,b);
|
|
|
|
|
//获得消息处理函数的指针
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_activate_default_event_cb(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
//return _gtkeventcall_(a,c,b);
|
|
|
|
|
return do_two_param_event(a, "activate-default");
|
|
|
|
|
//activate-default;
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_preedit_changed_event(a:pointer;b:pointer;c:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return dotparamseevents(a, "preedit-changed", b, c);
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_changed_event(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "changed");
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_day_select_event(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "day-selected");
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_delete_event(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "delete-event");
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_adj_value_changed_event(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "value-changed");
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_clicked_event(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "clicked");
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_activate_event(a:pointer;b:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return do_two_param_event(a, "activate");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function tsl_gtk_destroy_event(a:pointer; b:pointer;c:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(a,b,c);
|
|
|
|
|
end
|
|
|
|
|
function tsl_gtk_wmuser_event(a:pointer; p1:pointer;p2:pointer):integer;
|
|
|
|
|
begin
|
|
|
|
|
return dotparamseevents(a, "wm-user", p1, p2);
|
|
|
|
|
end
|
|
|
|
|
function do_two_param_event( a:pointer;b:string):integer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(a,GetGtkEventNameOrId(b),0);
|
|
|
|
|
end
|
|
|
|
|
function dotparamseevents(a:pointer; b:string;p1:pointer;p2:pointer):pointer;
|
|
|
|
|
begin
|
|
|
|
|
return _gtkeventcall_(a,GetGtkEventNameOrId(b),p1,p2);
|
|
|
|
|
end
|
|
|
|
|
function gdk_backend_is_wayland(); //wayland 判断
|
|
|
|
|
begin
|
|
|
|
|
return static is_wayland();
|
|
|
|
|
end
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function is_wayland();
|
|
|
|
|
begin
|
|
|
|
|
st := static sysgetenv("XDG_SESSION_TYPE");
|
|
|
|
|
@ -10041,10 +9814,6 @@ begin
|
|
|
|
|
"libc":
|
|
|
|
|
begin
|
|
|
|
|
return getdlsymaddress("libc.so.6",n);
|
|
|
|
|
end
|
|
|
|
|
"gtk":
|
|
|
|
|
begin
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
else return getdlsymaddress("libgtk-3.so.0",n);
|
|
|
|
|
end
|
|
|
|
|
|