#1 Le 01/10/2007, à 15:24
- luvyagal
Menu à la Mac
Bonjour tout la monde!!
Étant fan des graphisme mac, je suis tombé sur ce petit tutoriel, qui permet d'avoir un menu macstyle sur le tableau de bord:
http://ubuntuforums.org/showthread.php?p=2591836
perso, je n'ai jamais réussi à télécharger les sources. Donc j'ai utilisé cette méthode:
http://ubuntuforums.org/showpost.php?p=2495034&postcount=429
qui a marché pour moi. Donc je traduis et vous explique comment j'y suis arrivé, c'est simple:
1) Téléchargez gtk+-2.10.11.tar.gz ici, et décompressez-le:
ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-2.10.11.tar.gz
2) Faites un fichier texte que vous nommez gtkmenubar.diff et copier ce texte dedans:
--- gtk/gtkmenubar.c.old 2006-07-03 08:25:06.000000000 +0800
+++ gtk/gtkmenubar.c 2006-11-04 23:18:50.000000000 +0800
@@ -38,6 +38,18 @@
#include "gtkwindow.h"
#include "gtkprivate.h"
#include "gtkalias.h"
+// For mac menubar
+#include "gdk/x11/gdkx.h"
+#include "gdk/x11/gdkwindow-x11.h"
+#include "gtkbox.h"
+#include "gtkdrawingarea.h"
+#include "gtkhbox.h"
+#include "gtklabel.h"
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
#define BORDER_SPACING 0
@@ -55,6 +67,8 @@
{
GtkPackDirection pack_direction;
GtkPackDirection child_pack_direction;
+ GtkWindow* orig_toplevel_win; // original window, obtained in map()
+ GtkWindow* mbar_toplevel_win; // could be NULL, if disabled
};
#define GTK_MENU_BAR_GET_PRIVATE(o) \
@@ -89,9 +103,154 @@
G_DEFINE_TYPE (GtkMenuBar, gtk_menu_bar, GTK_TYPE_MENU_SHELL)
+
+/*
+ * Mac Menubar options
+ */
+
+static gboolean option_no_mac()
+{
+ static gboolean no_mac_set = FALSE;
+ static gboolean no_mac = FALSE;
+ char* env = NULL;
+ if (no_mac_set) return no_mac;
+ env = getenv("GTK_MENUBAR_NO_MAC");
+ if (env == NULL)
+ env = "acroread gnome-macmenu-applet gnome-panel xfce4-macmenu-plugin xfce4-panel";
+ if (strcmp(env, "1") == 0)
+ no_mac = TRUE;
+ else
+ {
+ // check for GTK_MENUBAR_NO_MAC
+ gchar** no_mac_prgs = g_strsplit(env, " ", 0);
+ gchar** p = no_mac_prgs;
+ gchar* prg = g_get_prgname();
+ while (*p != NULL)
+ {
+ if (strcmp(*p, prg) == 0)
+ {
+ no_mac = TRUE;
+ break;
+ }
+ p ++;
+ }
+ g_strfreev(no_mac_prgs);
+ }
+ if (! no_mac)
+ {
+ // check for mozplugger
+ char scmd[255];
+ char buffer[1024];
+ sprintf(scmd, "ps -o comm= -p `ps -o ppid= -p %d`", getpid());
+ FILE* f = popen(scmd, "r");
+ int len = fread(buffer, 1, 1023, f);
+ if (len > 0)
+ {
+ char* p;
+ buffer[len] = 0;
+ if ((p = index(buffer, '\n')) != NULL)
+ *p = 0;
+ if (strcmp(buffer, "mozplugger-help") == 0)
+ no_mac = TRUE;
+ }
+ else
+ {
+ fprintf(stderr, "failed to check for mozplugger by \"%s\"\n", scmd);
+ }
+ pclose(f);
+ }
+ no_mac_set = TRUE;
+ return no_mac;
+}
+
+/*
+ * Mac Menubar event handlers/callbacks
+ */
+
+static gboolean orig_toplevel_on_destroy (GtkWidget *widget, gpointer my_data)
+{
+ GtkMenuBar* menubar = (GtkMenuBar*) my_data;
+ GtkMenuBarPrivate* priv = GTK_MENU_BAR_GET_PRIVATE (menubar);
+ if (priv->mbar_toplevel_win)
+ {
+ gtk_widget_destroy (GTK_WIDGET (priv->mbar_toplevel_win));
+ priv->mbar_toplevel_win = NULL;
+ priv->orig_toplevel_win = NULL;
+ }
+ return FALSE;
+}
+
+static void orig_toplevel_on_event_after (GtkWidget* widget,
+ GdkEvent* event,
+ gpointer my_data)
+{
+ GtkMenuBar* menubar = (GtkMenuBar*) my_data;
+ GtkMenuBarPrivate* priv = GTK_MENU_BAR_GET_PRIVATE (menubar);
+ if (! priv->mbar_toplevel_win) return;
+ if (event->type == GDK_FOCUS_CHANGE && event->focus_change.in)
+ gtk_widget_show (GTK_WIDGET (priv->mbar_toplevel_win));
+}
+
+static void gtk_menu_bar_map (GtkWidget *widget)
+{
+ GtkMenuBar* menubar = GTK_MENU_BAR (widget);
+ GtkMenuBarPrivate* priv = GTK_MENU_BAR_GET_PRIVATE (menubar);
+
+ if (!priv->mbar_toplevel_win && !option_no_mac())
+ {
+ Atom typehints[2];
+ GdkGeometry geometry;
+ GtkRcStyle *mbarstyle;
+ // Setup menubar's original top-level window
+ priv->orig_toplevel_win
+ = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (menubar)));
+ g_signal_connect (GTK_WIDGET (priv->orig_toplevel_win), "destroy",
+ G_CALLBACK (orig_toplevel_on_destroy), menubar);
+ g_signal_connect (GTK_WIDGET (priv->orig_toplevel_win), "event-after",
+ G_CALLBACK (orig_toplevel_on_event_after), menubar);
+ // Create new top-level window for menubar
+ priv->mbar_toplevel_win
+ = GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL));
+ gtk_window_set_transient_for (priv->mbar_toplevel_win, priv->orig_toplevel_win);
+ gtk_window_set_title (priv->mbar_toplevel_win, "GTK MENUBAR");
+ gtk_window_set_resizable (priv->mbar_toplevel_win, FALSE);
+ gtk_window_set_decorated (priv->mbar_toplevel_win, FALSE);
+ gtk_window_set_type_hint (priv->mbar_toplevel_win,
+ GDK_WINDOW_TYPE_HINT_DOCK);
+ // Set geometry hints
+ geometry.max_width = geometry.min_width = -1;
+ geometry.max_height = geometry.min_height = -1;
+ gtk_window_set_geometry_hints (priv->mbar_toplevel_win,
+ GTK_WIDGET (priv->mbar_toplevel_win),
+ &geometry,
+ GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
+ gtk_window_stick (priv->mbar_toplevel_win);
+ g_signal_connect (GTK_WIDGET (priv->mbar_toplevel_win), "delete-event",
+ G_CALLBACK (gtk_widget_hide_on_delete), menubar);
+ // Menubar
+ gtk_widget_reparent (GTK_WIDGET (menubar),
+ GTK_WIDGET (priv->mbar_toplevel_win));
+ // Show everything!
+ gtk_widget_show_all (GTK_WIDGET (priv->mbar_toplevel_win));
+ typehints[0] = XInternAtom (gdk_display, "_KDE_NET_WM_WINDOW_TYPE_TOPMENU", FALSE);
+ typehints[1] = XInternAtom (gdk_display, "_NET_WM_WINDOW_TYPE_DOCK", FALSE);
+ XChangeProperty (gdk_display,
+ GDK_WINDOW_XID(GTK_WIDGET (priv->mbar_toplevel_win)->window),
+ XInternAtom (gdk_display, "_NET_WM_WINDOW_TYPE", FALSE),
+ XA_ATOM, 32, PropModeReplace,
+ (const guchar *) typehints, 2);
+ gtk_window_move (priv->mbar_toplevel_win, 0, 0);
+ }
+
+ (* GTK_WIDGET_CLASS (gtk_menu_bar_parent_class)->map) (GTK_WIDGET (menubar));
+}
+
static void
gtk_menu_bar_init (GtkMenuBar *object)
{
+ GtkMenuBarPrivate* priv = GTK_MENU_BAR_GET_PRIVATE (object);
+ priv->mbar_toplevel_win = 0;
+ priv->orig_toplevel_win = 0;
}
static void
@@ -114,6 +273,7 @@
widget_class->size_allocate = gtk_menu_bar_size_allocate;
widget_class->expose_event = gtk_menu_bar_expose;
widget_class->hierarchy_changed = gtk_menu_bar_hierarchy_changed;
+ widget_class->map = gtk_menu_bar_map;
menu_shell_class->submenu_placement = GTK_TOP_BOTTOM;
menu_shell_class->get_popup_delay = gtk_menu_bar_get_popup_delay;
3) Déplacez votre fichier gtkmenubar.diff dans le dossier que vous venez de décompresser.
4) Ouvrez un terminal et tapez:
sudo apt-get install pkg-config libjpeg62-dev libpng12-dev libtiff4-dev libfreetype6-dev fontconfig gettext libglibmm-2.4-1c2a libglibmm-2.4-dev libpango1.0-0 libpango1.0-dev libatk1.0-0 libatk1.0-dev libgtkmm-2.4-1c2a libgtkmm-2.4-dev
patch -p0 < gtkmenubar.diff
./configure --prefix=/usr
make
sudo make install
5) Téléchargez ici et installez le paquet "gnome-macmenu-applet":
http://chrislord.net/files/gtkmenubar/gnome-macmenu-applet_1.0.11-1_i386.deb
Ajoutez-le au tableau de bord et redémarrez votre ordinateur. Et voilà...
Les graphismes ne sont pas encore très beaux car les paquets ne sont peut-être pas très bien adaptés à Feisty mais peut-être pouvons-nous trouver des solutions... en tout cas, n'hésitez pas... chez certaines personnes, ça donne cela:
Dernière modification par luvyagal (Le 01/10/2007, à 15:27)
Hors ligne
#2 Le 01/10/2007, à 15:26
- kursus
Re : Menu à la Mac
Salut,
Merci pour ton astuce.
Tu aurais un screenshot stp?
Hors ligne
#3 Le 01/10/2007, à 15:27
- luvyagal
Re : Menu à la Mac
je viens d'en mettre un
ok c'est pas le bon... en voilà un d'unbuntu:
bon j'arrive pas à la faire afficher en entier, je sais pas pourquoi elle est coupée cette image, voilà son url original:
http://static.flickr.com/117/284328107_af99da556d_o.jpg
Dernière modification par luvyagal (Le 01/10/2007, à 15:56)
Hors ligne
#4 Le 01/10/2007, à 15:35
- sirius10
Re : Menu à la Mac
:cool:Coll
J essaye au plutot
Merci
"Pour ce qui est de l'Avenir, il ne s’agit pas de le prévoir, mais de le rendre possible."
Antoine de Saint-Exupéry
Hors ligne
#5 Le 01/10/2007, à 15:40
- dwan
Re : Menu à la Mac
je viens d'en mettre un
Sauf que ça c'est un screenshot de MacOS, probablement Leopard.
Auto-hébergé !
HP dv6164ea
Hors ligne
#6 Le 01/10/2007, à 15:42
- luvyagal
Re : Menu à la Mac
petit problème: j'arrive pas à mettre de banderoles ou avoir un effet transparence ou même avoir l'icône mac... je crois que les paquets ne sont pas les meilleurs.
Si quelqu'un à une idée... moi je cherche de mon côté.
Hors ligne
#7 Le 01/10/2007, à 16:41
- LittleCj3k
Re : Menu à la Mac
bonjour,
pour avoir la transparence il y a compiz-fusion (on peut jouer sur la transparence de plusieurs choses dans général option>opacity Settings>windows opacity) par contre je ne me rappelles plus des options mais en cherchant sur le forum tu trouveras
et pour l'icone mac, il suffit que tu le récupère en un quelque par et de l'ajouter dans g-conf pour le menu principal ( apps>panel>applets_X, tu coches "use_custom_icon" et tu mets l'adresses de l'icone dans "custom_icon") par contre tu dois activer le "menu pricipal" comme applet
Dernière modification par LittleCj3k (Le 01/10/2007, à 16:49)
Hors ligne
#8 Le 01/10/2007, à 19:39
- luvyagal
Re : Menu à la Mac
Merci LittleCj3k pour les infos.
Bon cependant l'installation de compiz-fusion, suivant ce tutos https://help.ubuntu.com/community/CompositeManager/CompizFusion
a tout fait planter, il a fallu que je désinstalle tout compiz, que je supprime tous les fichier et que je réinstalle tout... bref je vais voir s'il y a mieux pour compiz-fusion et essayer de régler ce problème de transparence par que j'ai un gris tout moche, si quelqu'un a une solution...
De plus ce n'est pas dans apps>panel>applets_X qu'il faut faire les changements mais dans apps>panel>objects... qui correspond aux lanceurs du tableau de bord (donc il faut en ajouter un exprès).
Merci en tout cas on avance... des retours? des gens qui ont testé la méthode?
Dernière modification par luvyagal (Le 01/10/2007, à 19:41)
Hors ligne
#9 Le 02/10/2007, à 15:57
- antistress
Re : Menu à la Mac
le dock, c'est AWN ?
Avec cette méthode, c'est bien la barre de menus de l'application courante qui se trouve déportée dans le tableau de bord ?
Blogue : Libre et ouvert
Hors ligne
#10 Le 02/10/2007, à 17:39
- LittleCj3k
Re : Menu à la Mac
le dock, c'est AWN ?
Avec cette méthode, c'est bien la barre de menus de l'application courante qui se trouve déportée dans le tableau de bord ?
c'est bien ça
Hors ligne
#11 Le 02/10/2007, à 22:05
- antistress
Re : Menu à la Mac
et c'est pratique la barre de menus dans le tableau de bord ?
Blogue : Libre et ouvert
Hors ligne
#12 Le 03/10/2007, à 10:28
- LittleCj3k
Re : Menu à la Mac
j'ai testé le hack sur gutsy 64 bits (ce qui m'as pris du temps pour trouver les sources de l'applet) et j'ai pus obtenir a peut près ça pour voir si s'était bien ça que vous vouliez obtenir?
et c'est pratique la barre de menus dans le tableau de bord ?
moi je trouves que c'est pratique
Dernière modification par LittleCj3k (Le 03/10/2007, à 10:29)
Hors ligne
#13 Le 03/10/2007, à 12:47
- U-topic
Re : Menu à la Mac
POur ma part cest exactement ca que je chercher !!
au final tu as fait comment ??
l'application du patch marche pas chez moi...:rolleyes:
Dernière modification par U-topic (Le 03/10/2007, à 13:53)
Hors ligne
#14 Le 03/10/2007, à 13:56
- luvyagal
Re : Menu à la Mac
oui c'est exactement ça que je cherche à faire, cependant j'ai toujours pas trouvé comment avoir les transparences... comment as-tu fait LittleCj3k? c'est avec compiz-fusion? encore une fois chez moi ça a complètement fait planter l'OS. tu as trouvé les sources où? tu es sur gutsy?
C'est très pratique surtout si on est habitué à mac... moi je suis habitué à ubuntu et mac donc c'est parfait pour moi....
Dernière modification par luvyagal (Le 03/10/2007, à 13:57)
Hors ligne
#15 Le 03/10/2007, à 19:47
- LittleCj3k
Re : Menu à la Mac
comme je suis sous gutsy 64 bits, je vais expliquer pour cette version:
-j'ai d'abords récupérer les sources de gtk+2.0 utilisé par gutsy sur packages.ubuntu.com
ensuite j'ai désarchivé et je me suis placé dans le répertoire en console et j'ai tappé:
sudo apt-get install pkg-config libjpeg62-dev libpng12-dev libtiff4-dev libfreetype6-dev fontconfig gettext libglibmm-2.4-1c2a libglibmm-2.4-dev libpango1.0-0 libpango1.0-dev libatk1.0-0 libatk1.0-dev libgtkmm-2.4-1c2a libgtkmm-2.4-dev
patch -p0 < gtkmenubar.diff
./configure --prefix=/usr
make
sudo make install
_ensuite, j'ai compilé l'applet macmenu pour le panel du bureau à partir de ce howto
_après j'ai relancé X et j'ai ajouté l'applet au panel
_Pour la transparance j'ai utilisé compiz-fusion intégré à gutsy, dans le csm:
général option>Opacity Settings>window opacities
j'ai ajoutés les options:
DropdownMenu : 80
Menu : 80
Dock : 90
par contre il faut activer le plugin Reflexion
pour le theme gtk et beryl (ou metacity)
il suffit dans choisir un parmit ceux qui ressemble à léopard comme celui-ci ou celui-là
voilà
Dernière modification par LittleCj3k (Le 03/10/2007, à 19:53)
Hors ligne
#16 Le 03/10/2007, à 19:53
- U-topic
Re : Menu à la Mac
patch: **** malformed patch at line 22: @@ -55,6 +67,8 @@
....
Hors ligne
#17 Le 03/10/2007, à 20:00
- U-topic
Re : Menu à la Mac
reussi le patchage avec :
http://gentoo-overlays.zugaina.org/xeffects/portage/x11-libs/gtk+/files//gtk+-2.10-gtkmenubar.diff
Hors ligne
#18 Le 03/10/2007, à 20:34
- LittleCj3k
Re : Menu à la Mac
j'avais oublié de dire que ce patch là ne marchait pas non plus pour moi, j'ai utilisé la dernière version, désolé
Dernière modification par LittleCj3k (Le 03/10/2007, à 20:35)
Hors ligne
#19 Le 03/10/2007, à 21:59
- U-topic
Re : Menu à la Mac
oui alors moi ca ne marche pas du tout ...
je rajoute lapplet et il maffiche juste le nom des fenetres...
Hors ligne
#20 Le 03/10/2007, à 22:17
- belga
Re : Menu à la Mac
peut on revenir en arrière facilement
???
Multi-bomb : Multi-doze : Mandoze, Ubundoze, Pardoze.
900s entre deux postes: mododoze
Hors ligne
#21 Le 03/10/2007, à 22:19
- LittleCj3k
Re : Menu à la Mac
oui alors moi ca ne marche pas du tout ...
je rajoute lapplet et il maffiche juste le nom des fenetres...
est-ce que le menu c'est bien détacher des fenêtres?
peut on revenir en arrière facilement
???
oui, il suffit de réinstaller gtk+ sans le patch
Hors ligne
#22 Le 03/10/2007, à 22:21
- U-topic
Re : Menu à la Mac
oui mais les menus n'ont rien de mac...
tu fais comment pour reinstaller gtk sans le patch ? tu le recompiles ou par les depotsz?
Hors ligne
#23 Le 03/10/2007, à 22:35
- LittleCj3k
Re : Menu à la Mac
oui mais les menus n'ont rien de mac...
tu fais comment pour reinstaller gtk sans le patch ? tu le recompiles ou par les depotsz?
n'importe lequel fera l'affaire
Hors ligne
#24 Le 04/10/2007, à 23:28
- samefab
Re : Menu à la Mac
tu l'as chopé où ton patch pour gtk ?
Hors ligne
#25 Le 05/10/2007, à 18:26
- U-topic
Re : Menu à la Mac
reussi le patchage avec :
http://gentoo-overlays.zugaina.org/xeffects/portage/x11-libs/gtk+/files//gtk+-2.10-gtkmenubar.diff
celui la marche...
Hors ligne