unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
blob c85a51e1f999b8efe7f82562e1040b82f61b43ba 4565 bytes (raw)
name: gtk4.org 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
 
* Porting Emacs to GTK 4
  GTK 4 is a new major release of the GTK toolkit, which brings
  faster and better rendering, improved broadway support, and
  massive restructuring and modernization to GTK.

  This documents the effort being undertaken to port Emacs to
  GTK 4.
** Important issues that should be addressed
*** gtk_main_iteration () has been removed
    ~gtk_main_iteration ()~ has been removed. This means all
    occurrences of ~gtk_main_iteration ()~ must be replaced
    with ~g_main_context_iteration ()~, like:
    #+NAME: GTK event loop iteration
    #+BEGIN_SRC C
#include <gtk/gtk.h>

int main (void)
  {
    g_main_context_iteration (NULL, false);
  }

    #+END_SRC

*** Menus need to be implemented from scratch.
    GTK 4 removes ~~GtkMenuShell~~, and associated classes.
    GtkPopovers are a far more modern replacement, but require
    a rewrite of the menu handling system.

*** GdkScreen is gone.
    Emacs makes heavy usage of the deprecated obsolete APIs in
    GdkScreen, which need to be replaced.

** What has been done
*** gtkutil.c has been removed
    ~~gtkutil.c~~ is obsolete and will no longer be used for GTK 4
    builds. GTK-related procedures for GTK 4 have been moved or
    rewritten, and are now placed in ~~pgtksubr.c~~.

*** All object files now compile without errors
    Several functions are not yet implemented, and cause the
    executable to fail to link.
*** Emacs now compiles without errors
*** The configure scripts now detect and use GTK 4.
** What will be done
   Everything in this section will be completed sooner or later
*** DONE Make it build
    Emacs now compiles without errors.
*** DONE Make basic functionality, such as window creation and drawing work
    Emacs successfully draws to the GtkDrawingArea widget.
*** DONE Make event handling work
    So far this hasn't happened yet.
*** DONE Make input method handling work
    Input methods are now fully functional on GTK 4 builds.
*** DONE Port tooltips to GTK 4
    +We rely on adding a GtkFixed to the frame overlay widget,+
    +as you can no longer intercept tooltip windows as they+
    +are being displayed.+
    +We now rely on setting the drawing area tool-tip, and manually+
    +positioning it once it is displayed.+
    We now create a fake tooltip-styled popover.
*** DONE Make kill ring <-> GTK integration work again
    Clipboard management in GTK has been moved to GDK,
    and the behaviour has been changed to better
    reflect modern display technologies. The concepts
    of "ownership", secondary selections and cut
    buffers have been abolished. This requires a
    rewrite of the selection handling code.
*** DONE Port the frame HeaderBar to GTK 4
**** DONE Implement HeaderBar tool items
     Tool items are now implemented.
**** DONE Implement header bar menus.
     Header bar (and popup menus) are not yet implemented.
*** DONE Port window pop-up menus to GTK 4
    +This will probably involve some tricks, as the new GTK popover widget+
    +does not play very well with manual event handling.+
    Popup menus have been implemented.
*** DONE Implement child frame handling for GTK 4
    ~~gtk_window_move~~ has been removed, and changes to subsurface
    handling have occurred. This means child frames will have to be
    re-implemented from scratch.
    Child frames have now been implemented. They can only be
    displayed within the bounds of the parent frame.
*** DONE Use only public APIs
    Emacs currently relies on many unstable and undocumented private
    GTK 4 interfaces in order to function. This should be eliminated.
**** DONE Extending ~~GtkEventController~~
     +Emacs does manual event handling, and reimplements much of the+
     +logic in ~~GtkGesture~~. One cannot manually handle events+
     +this way on GTK 4 without relying on private APIs.+
     Emacs now uses a ~~GtkEventControllerLegacy~~.
**** DONE Accessing ~~GdkEvent~~ fields
     Emacs relies on accessing certain private undocumented GdkEvent
     fields in order to work around certain GTK bugs. This should be
     eliminated.
**** DONE Accessing private GtkScrollbar fields
     We rely on manually retrieving the GtkRange
     associated to the GtkScrollbar.
*** DONE Implement toolkit scroll bars
    Toolkit scroll bars are now implemented. They are displayed in
    the frame overlay.
*** DONE Implement toolkit tool-bars
    Toolkit tool-bars are now implemented.
** What *won't* be done
   Functionality in this category is either made redundant by
   work done to port Emacs to GTK 4, or is obsolete anyways.

debug log:

solving c85a51e1f9 ...
found c85a51e1f9 in https://yhetil.org/emacs-devel/87zhaxjpea.fsf@yahoo.com/

applying [1/1] https://yhetil.org/emacs-devel/87zhaxjpea.fsf@yahoo.com/
diff --git a/gtk4.org b/gtk4.org
new file mode 100644
index 0000000000..c85a51e1f9

Checking patch gtk4.org...
Applied patch gtk4.org cleanly.

index at:
100644 c85a51e1f999b8efe7f82562e1040b82f61b43ba	gtk4.org

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).