diff options
Diffstat (limited to 'UToolTips.pas')
| -rw-r--r-- | UToolTips.pas | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/UToolTips.pas b/UToolTips.pas index 6926456..8ce6666 100644 --- a/UToolTips.pas +++ b/UToolTips.pas @@ -22,7 +22,7 @@ unit UToolTips; interface -uses lazglib2, lazgobject2, gdk2, gtk2, pango; +uses lazglib2, lazgobject2, lazgdk3, lazgtk3, lazpango1; procedure FileListTipsInstall(ATreeView: PGtkTreeView); procedure FileListTipsEnable; @@ -55,8 +55,11 @@ function tips_button_press_event(widget: PGtkWidget; event: PGdkEventButton; use procedure FileListTipsInstall(ATreeView: PGtkTreeView); begin + // TODO +{ g_signal_connect_data(PGObject(ATreeView), 'event-after', TGCallback(@event_handler), nil, nil, [G_CONNECT_AFTER]); g_signal_connect_data(PGObject(ATreeView), 'leave-notify-event', TGCallback(@on_leave_notify), nil, nil, G_CONNECT_DEFAULT); +} end; procedure file_list_tips_show_tip(AListView: PGtkTreeView; row: PGtkTreePath; column: PGtkTreeViewColumn); @@ -79,7 +82,7 @@ begin if (sec < 1) and (ms < ConstFileListTipsDelayNeighbour * 1000) then Timeout := 1; // DebugMsg(['Time elapsed = ', Double(sec), ':', integer(ms div 1000)]); end; - timer_id := gtk_timeout_add(Timeout, @show_tip_widget, nil); + timer_id := g_timeout_add(Timeout, @show_tip_widget, nil); end; @@ -89,9 +92,9 @@ var view: PGtkTreeView; path: PGtkTreePath; begin Result := False; - view := GTK_TREE_VIEW(widget); + view := PGtkTreeView(widget); if event^.any.window <> gtk_tree_view_get_bin_window(view) then Exit; - case event^._type of + case event^.type_ of GDK_KEY_PRESS, GDK_SCROLL: begin FileListTipsHide; @@ -103,11 +106,11 @@ begin end; GDK_FOCUS_CHANGE: begin Result := True; - if event^.focus_change._in <> 1 then FileListTipsHide; + if event^.focus_change.in_ <> 1 then FileListTipsHide; end; GDK_MOTION_NOTIFY: begin Result := True; - if not gtk_tree_view_get_path_at_pos(view, Trunc(event^.motion.x), Trunc(event^.motion.y), path, column, nil, nil) + if not gtk_tree_view_get_path_at_pos(view, Trunc(event^.motion.x), Trunc(event^.motion.y), @path, @column, nil, nil) then begin FileListTipsHide; if tips_timer <> nil then begin @@ -131,14 +134,15 @@ begin try if not Assigned(tip_window) then create_widgets; - if not ConfUseSystemFont then begin + // TODO +{ if not ConfUseSystemFont then begin FontDesc := pango_font_description_from_string(PChar(ConfPanelFont)); gtk_widget_modify_font(PGtkWidget(tip_label), FontDesc); end else gtk_widget_modify_font(PGtkWidget(tip_label), nil); - - gtk_label_set_markup(GTK_LABEL(tip_label), Text); - widget := GTK_WIDGET(panel); - hadjustment := gtk_tree_view_get_hadjustment(panel); +} + gtk_label_set_markup(PGtkLabel(tip_label), Text); + widget := PGtkWidget(panel); + hadjustment := gtk_scrollable_get_hadjustment(PGtkScrollable(panel)); x := x - Trunc(gtk_adjustment_get_value(hadjustment)); gdk_window_get_origin(widget^.window, @wx, @wy); @@ -147,10 +151,10 @@ begin scr_w := gdk_screen_width; gtk_label_set_line_wrap(tip_label, False); - gtk_widget_size_request(GTK_WIDGET(tip_window), @requisition); + gtk_widget_get_preferred_size(PGtkWidget(tip_window), @requisition, nil); if x + requisition.width > scr_w {PGtkWidget(panel)^.allocation.width} then begin gtk_label_set_line_wrap(tip_label, True); - gtk_widget_size_request(GTK_WIDGET(tip_window), @requisition); + gtk_widget_get_preferred_size(PGtkWidget(tip_window), @requisition, nil); end; w := requisition.width; @@ -164,30 +168,31 @@ end; function gtk_tooltips_paint_window(widget: PGtkWidget; event: PGdkEventExpose; user_data: gpointer): gboolean; cdecl; begin - gtk_paint_flat_box(gtk_widget_get_style(widget), widget^.window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, + // TODO +{ gtk_paint_flat_box(gtk_widget_get_style(widget), widget^.window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, nil, widget, 'tooltip', 0, 0, -1, -1); - Result := False; + Result := False; } end; procedure create_widgets; begin if Assigned(tip_window) then Exit; - tip_window := GTK_WINDOW(gtk_window_new(GTK_WINDOW_POPUP)); - gtk_widget_set_app_paintable(GTK_WIDGET(tip_window), True); + tip_window := PGtkWindow(gtk_window_new(GTK_WINDOW_POPUP)); + gtk_widget_set_app_paintable(PGtkWidget(tip_window), True); gtk_window_set_resizable(tip_window, False); - gtk_widget_set_name(GTK_WIDGET(tip_window), 'gtk-tooltips'); - gtk_container_set_border_width(GTK_CONTAINER(tip_window), 4); - gtk_widget_set_events(GTK_WIDGET(tip_window), GDK_POINTER_MOTION_MASK or GDK_BUTTON_PRESS_MASK or GDK_KEY_PRESS_MASK or GDK_FOCUS_CHANGE_MASK or GDK_SCROLL_MASK); + gtk_widget_set_name(PGtkWidget(tip_window), 'gtk-tooltips'); + gtk_container_set_border_width(PGtkContainer(tip_window), 4); + gtk_widget_set_events(PGtkWidget(tip_window), [GDK_POINTER_MOTION_MASK, GDK_BUTTON_PRESS_MASK, GDK_KEY_PRESS_MASK, GDK_FOCUS_CHANGE_MASK, GDK_SCROLL_MASK]); g_signal_connect_data(PGObject(tip_window), 'event', TGCallback(@tip_event_handler), nil, nil, G_CONNECT_DEFAULT); g_signal_connect_data(PGObject(tip_window), 'expose_event', TGCallback(@gtk_tooltips_paint_window), tip_window, nil, G_CONNECT_DEFAULT); g_signal_connect_data(PGObject(tip_window), 'button-press-event', TGCallback(@tips_button_press_event), tip_window, nil, G_CONNECT_DEFAULT); - tip_label := GTK_LABEL(gtk_label_new(nil)); - gtk_misc_set_alignment(GTK_MISC(tip_label), 0, 0.5); - gtk_widget_show(GTK_WIDGET(tip_label)); + tip_label := PGtkLabel(gtk_label_new(nil)); + gtk_label_set_yalign(tip_label, 0.5); + gtk_widget_show(PGtkWidget(tip_label)); - gtk_container_add(GTK_CONTAINER(tip_window), GTK_WIDGET(tip_label)); + gtk_container_add(PGtkContainer(tip_window), PGtkWidget(tip_label)); end; procedure FileListTipsHide; @@ -197,8 +202,8 @@ begin data_row := nil; data_column := nil; - if GTK_WIDGET_VISIBLE(tip_window) then begin - gtk_widget_hide(GTK_WIDGET(tip_window)); + if gtk_widget_get_visible(tip_window) then begin + gtk_widget_hide(PGtkWidget(tip_window)); if tips_timer = nil then tips_timer := g_timer_new; g_timer_start(tips_timer); // gdk_beep(); @@ -206,7 +211,7 @@ begin end; if timer_id <> 0 then begin - gtk_timeout_remove(timer_id); + g_source_remove(timer_id); timer_id := 0; end; end; @@ -308,7 +313,7 @@ begin if ConfDirsInBold and Data^.IsDir then Text := PChar(Format('<span weight="bold">%s</span>', [Text])); draw_tip_widget(data_panel, Text, Rect.x, Rect.y + Rect.height + 2); // if Assigned(text) then g_free(text); - if not GTK_WIDGET_VISIBLE(GTK_WIDGET(tip_window)) then gtk_widget_show(GTK_WIDGET(tip_window)); + if not gtk_widget_get_visible(PGtkWidget(tip_window)) then gtk_widget_show(PGtkWidget(tip_window)); except on E: Exception do DebugMsg(['*** Exception raised in function show_tip_widget(user_data: gpointer): gboolean (', E.ClassName, '): ', E.Message]); @@ -334,7 +339,7 @@ end; function tip_event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl; begin Result := True; - case event^._type of + case event^.type_ of GDK_KEY_PRESS, {GDK_BUTTON_PRESS, }GDK_SCROLL, GDK_FOCUS_CHANGE{, GDK_MOTION_NOTIFY}: begin FileListTipsHide; @@ -350,7 +355,7 @@ end; function on_leave_notify(widget: PGtkWidget; event: PGdkEventCrossing; user_data: gpointer): gboolean; cdecl; begin - if Assigned(tip_window) and (not GTK_WIDGET_VISIBLE(tip_window)) + if Assigned(tip_window) and (not gtk_widget_get_visible(tip_window)) then begin FileListTipsHide; if tips_timer <> nil then begin |
