Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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:

screenshot13.png

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 wink

ok c'est pas le bon... en voilà un d'unbuntu:

284328107_af99da556d_o.jpg

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

luvyagal a écrit :

je viens d'en mettre un wink

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é.
big_smile

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 ?

Hors ligne

#10 Le 02/10/2007, à 17:39

LittleCj3k

Re : Menu à la Mac

antistress a écrit :

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 wink

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 ?

Hors ligne

#12 Le 03/10/2007, à 10:28

LittleCj3k

Re : Menu à la Mac

8ae8faeda4e1c0eaa45ff550a16f5t.jpg

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 wink

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....
big_smile

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à wink

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

U-topic a écrit :

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?

belga a écrit :

peut on revenir en arrière facilement
???

oui, il suffit de réinstaller gtk+ sans le patch wink

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

U-topic a écrit :

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 wink

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

U-topic a écrit :

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