]> git.sur5r.net Git - i3/i3/blobdiff - docs/NoName-2009-03-12/i3.tex
Merge pull request #3175 from orestisf1993/dump-asy
[i3/i3] / docs / NoName-2009-03-12 / i3.tex
index 8a367fede2425bf56ac97a93c605990960b52904..4ca05f241478ddec83f0ba7fe802cacb75fc0b10 100644 (file)
 \usepackage{listings}
 \newcommand{\bs}{\textbackslash}
 \pdsetup{palette=white}
+\definecolor{darkblue}{rgb}{0,0,.6}
+\definecolor{darkred}{rgb}{.6,0,0}
+\definecolor{darkgreen}{rgb}{0,.6,0}
+\definecolor{darkgray}{gray}{.3}
+\definecolor{lightblue}{rgb}{0.97,0.99,1}
+
+\lstloadlanguages{C}
+\lstdefinestyle{colors}{keywordstyle={\bf\color{darkblue}}, commentstyle={\em\color{magenta}}, stringstyle={\color{darkred}},%
+                       emphstyle={\color{darkgray}}}
 \lstnewenvironment{code}{%
-       \lstset{frame=single, basicstyle=\footnotesize\ttfamily}
+       \lstset{frame=single, basicstyle=\footnotesize\ttfamily, language=C, showstringspaces=false,%
+               style=colors, numbers=left, morekeywords={xcb_get_window_attributes_cookie_t, xcb_map_request_event_t,%
+               xcb_connection_t, xcb_get_window_attributes_reply_t, window_attributes_t, xcb_intern_atom_cookie_t,%
+               xcb_intern_atom_reply_t, xcb_atom_t},%
+               moreemph={xcb_get_window_attributes_reply, xcb_get_window_attributes_unchecked, manage_window,%
+               add_ignore_event, xcb_intern_atom, xcb_intern_atom_reply, fprintf, printf, free, load_configuration,%
+               XInternAtom, exit, strlen}}
 }{}
 \title{i3 - an improved dynamic tiling window manager}
 \author{sECuRE beim NoName e.V.\\
@@ -21,18 +36,6 @@ powered by \LaTeX, of course}
 \begin{document}
 \maketitle
 
-%\begin{slide}{Inhalt}
-%\begin{list}{$\bullet$}{\itemsep=1em}
-%      \item Bevor es losgeht
-%      \item Wie man korrekt kompiliert (Symbols)
-%      \item Grundwissen gdb
-%      \item Wenn es knallt (Core dumps)
-%      \item (Conditional) Breakpoints/Watchpoints
-%      \item Abkürzungen
-%      \item Macros
-%\end{list}
-%\end{slide}
-
 \begin{slide}{Geschichte}
 \begin{list}{$\bullet$}{\itemsep=1em}
        \item<1-> „All window managers suck, this one just sucks less”?
@@ -62,12 +65,22 @@ Drücken Sie Mod1+2 um diese Demo zu starten.
 \end{list}
 \end{slide}
 
+\begin{slide}{Typische Kommunikation mit X}
+\begin{list}{$\bullet$}{\itemsep=1em}
+       \item<1-> Verbindung aufbauen
+       \item<2-> Requests über die Leitung schicken (Fenster erzeugen)
+       \item<3-> Eventloop starten, reagieren (Fenster zeichnen, Eingaben, …)
+\end{list}
+\end{slide}
+
 \begin{slide}{Was genau macht ein WM?}
 \begin{list}{$\bullet$}{\itemsep=1em}
-       \item<1-> Neue Fenster positionieren
-       \item<2-> Titelleisten malen (reparenting)
-       \item<3-> Den Fokus verwalten
-       \item<4-> Mit Hints umgehen (Fullscreen, Dock, …)
+       \item<1-> Events umlenken
+       \item<2-> Neue Fenster anzeigen/positionieren (MapRequest)
+       \item<3-> Titelleisten malen (reparenting)
+       \item<4-> Den Fokus verwalten
+       \item<5-> Mit Hints umgehen (Fenstertitel, Fullscreen, Dock, …)
+       \item<6-> Auf Benutzereingaben reagieren
 \end{list}
 \end{slide}
 
@@ -79,6 +92,33 @@ Drücken Sie Mod1+2 um diese Demo zu starten.
 \end{list}
 \end{slide}
 
+\begin{slide}[method=direct]{Protokoll, Beispielcode}
+\begin{code}
+int handle_map_request(void *prophs, xcb_connection_t *conn,
+                      xcb_map_request_event_t *event) {
+  xcb_get_window_attributes_cookie_t cookie;
+  xcb_get_window_attributes_reply_t *reply;
+
+  cookie = xcb_get_window_attributes_unchecked(conn, event->window);
+
+  if ((reply = xcb_get_window_attributes_reply(conn, cookie, NULL))
+      == NULL) {
+          LOG("Could not get window attributes\n");
+          return -1;
+  }
+
+  window_attributes_t wa = { TAG_VALUE };
+  wa.u.override_redirect = reply->override_redirect;
+
+  add_ignore_event(event->sequence);
+
+  manage_window(prophs, conn, event->window, wa);
+
+  return 1;
+}
+\end{code}
+\end{slide}
+
 \begin{slide}{Was an X nicht so toll ist}
 \begin{list}{$\bullet$}{\itemsep=1em}
        \item<1-> Einige race conditions vorhanden
@@ -102,6 +142,46 @@ Drücken Sie Mod1+2 um diese Demo zu starten.
 \end{list}
 \end{slide}
 
+\begin{slide}[method=direct]{Xlib-Beispielcode}
+\begin{code}
+  char *names[10] = {"_NET_SUPPORTED", "_NET_WM_STATE",
+  "_NET_WM_STATE_FULLSCREEN", "_NET_WM_NAME" /* ... */};
+  Atom atoms[10];
+
+  /* Get atoms */
+  for (int i = 0; i < 10; i++) {
+    atoms[i] = XInternAtom(display, names[i], 0);
+  }
+\end{code}
+\end{slide}
+
+\begin{slide}[method=direct]{XCB-Beispielcode}
+\begin{code}
+char *names[10] = {"_NET_SUPPORTED", "_NET_WM_STATE",
+  "_NET_WM_STATE_FULLSCREEN", "_NET_WM_NAME" /* ... */};
+xcb_intern_atom_cookie_t cookies[10];
+
+/* Place requests for atoms as soon as possible */
+for (int c = 0; c < 10; c++)
+  xcb_intern_atom(connection, 0, strlen(names[c]), names[c]);
+
+/* Do other stuff here */
+load_configuration();
+
+/* Get atoms */
+for (int c = 0; c < 10; c++) {
+  xcb_intern_atom_reply_t *reply =
+    xcb_intern_atom_reply(connection, cookies[c], NULL);
+  if (!reply) {
+    fprintf(stderr, "Could not get atom\n");
+    exit(-1);
+  }
+  printf("atom has ID %d\n", reply->atom);
+  free(reply);
+}
+\end{code}
+\end{slide}
+
 \begin{slide}{Xft}
 \begin{list}{$\bullet$}{\itemsep=1em}
        \item<1-> „X FreeType”, library um antialiased fonts zu benutzen
@@ -135,7 +215,7 @@ Drücken Sie Mod1+2 um diese Demo zu starten.
 \begin{slide}{Mehr infos}
 \begin{list}{$\bullet$}{\itemsep=1em}
        \item git-webinterface: \url{http://code.stapelberg.de/git/i3}
-       \item Website: \url{http://i3.zekjur.net}
+       \item Website: \url{http://i3wm.org}
        \item IRC: \#i3 auf irc.twice-irc.de
 \end{list}
 \end{slide}