Como hacer que las categorías de Whisker Menu aparezcan a la Izquierda


Ayer publiqué un post en donde les compartí un Wisker Menu modificado por mi, en el cual las categorías se muestran a la izquierda y las aplicaciones a la derecha (como en cualquier menú  tradicional), el caso es que a petición de Eduardo, hoy les mostraré como pueden realizar este cambio ustedes mismos.

Para empezar debo aclarar que no es nada del otro mundo (de hecho carece de ciencia), por lo tanto inclusive aquellos sin conocimientos en programación pueden hacerlo, eso sí, acatando mis instrucciones al pie de la letra.

Paso 1

Descargar e instalar las herramientas indispensables para compilar:


aptitude install build-essential checkinstall cmake libexo-1-dev libgarcon-1-0-dev libxfce4ui-1-dev libxfce4util-dev xfce4-panel-dev make git

Paso 2

Clonamos el repositorio de WiskerMenu desde la terminal con el siguiente comando.

git clone https://github.com/gottcode/xfce4-whiskermenu-plugin

Paso 3

 

Abrimos nuestro explorador de archivos (Thunar) y nos ubicamos en el directorio WiskerMenu dentro de nuestra carpeta /home, posteriormente ingresamos al subdirectorio /panel-plugin, una vez allí, abrimos el archivo window.cpp con nuestro editor favorito (gedit, leafpad, mousepad, geany) y en él identificamos las siguientes lineas.

Nota: Perdonen si la indentación en el blog no se muestra.

 

	// Create box for packing launcher pages
	m_panels_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_panels_box), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_favorites->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_recent->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_applications->get_widget(), true, true, 0);

	// Create box for packing sidebar
	m_sidebar_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_favorites_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_recent_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, gtk_hseparator_new(), false, true, 0);

	m_sidebar = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_sidebar), false, false, 0);
	gtk_scrolled_window_set_shadow_type(m_sidebar, GTK_SHADOW_NONE);
	gtk_scrolled_window_set_policy(m_sidebar, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);

	GtkWidget* viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(m_sidebar),
		gtk_scrolled_window_get_vadjustment(m_sidebar));
	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
	gtk_container_add(GTK_CONTAINER(m_sidebar), viewport);
	gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(m_sidebar_box));

	GtkSizeGroup* sidebar_size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_sidebar));
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_commands_align));

Lo anterior significa en palabras cristianas que, el primer elemento agregado al contenedor (digamos la ventana del menú) de izquierda a derecha,
sera el «panel_box» es decir, el área de aplicaciones, seguido del «sidebar» área de categorías, por lo tanto respetando el orden respectivo, la ventana mostrará primero las aplicaciones a la izquierda y luego las categorías a la derecha.

Por lo tanto lo único que debemos hacer para cambiar esto, es invertir el orden en el que son agregados los componentes, lo que naturalmente se logra cambiando de lugar el componente que se agregará de primero; de manera práctica, cortamos la parte que dice  // Create box for packing launcher pages  hasta antes de // Create box for packing sidebar y la pegamos debajo de esta. Nos quedará de la siguiente forma.

 

 

// Create box for packing sidebar
	m_sidebar_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_favorites_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, GTK_WIDGET(m_recent_button->get_button()), false, false, 0);
	gtk_box_pack_start(m_sidebar_box, gtk_hseparator_new(), false, true, 0);

	m_sidebar = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_sidebar), false, false, 0);
	gtk_scrolled_window_set_shadow_type(m_sidebar, GTK_SHADOW_NONE);
	gtk_scrolled_window_set_policy(m_sidebar, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);

	GtkWidget* viewport = gtk_viewport_new(gtk_scrolled_window_get_hadjustment(m_sidebar),
		gtk_scrolled_window_get_vadjustment(m_sidebar));
	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
	gtk_container_add(GTK_CONTAINER(m_sidebar), viewport);
	gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(m_sidebar_box));

	GtkSizeGroup* sidebar_size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_sidebar));
	gtk_size_group_add_widget(sidebar_size_group, GTK_WIDGET(m_commands_align));

	// Create box for packing launcher pages
	m_panels_box = GTK_BOX(gtk_vbox_new(false, 0));
	gtk_box_pack_start(m_contents_box, GTK_WIDGET(m_panels_box), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_favorites->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_recent->get_widget(), true, true, 0);
	gtk_box_pack_start(m_panels_box, m_applications->get_widget(), true, true, 0);

Bien con esto ya hemos cambiado las categorías a la izquierda y las aplicaciones a la derecha, sin embargo, si cambiamos el menú de posición a una que no sea tradicional, es decir en el borde derecho de la pantalla tendremos problemas con el re posicionamiento de los elementos del menú, les ilustro.

Por defecto WiskerMenu  ubica las aplicaciones a la izquierda y las categorías a la derecha (ya aburro con esa hablada jeje) pero esto sólo es así, cuando el menú se encuentra en las esquinas superior e inferior izquierda de la pantalla. Si por el contrario se encuentra en las esquinas derechas, el menú cambia a nuestra posición deseada (categorías izquierda; aplicaciones derecha) es ilógico lo sé, pero así lo pensaron los desarrolladores, entonces con nuestra siguiente modificación, vamos a alterar dicho reordenamiento para que sea inverso y lógico.

Paso 4

Ubicamos está linea  y en la sección else,  cambiamos m_panels_box, 2 por un 1 y m_sidebar, 1 por un 2.

if ((layout_left && !wm_settings->position_categories_alternate)
            || (!layout_left && wm_settings->position_categories_alternate))
    {
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_panels_box), 1);
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_sidebar), 2);
    }
    else
    {
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_panels_box), 2);
        gtk_box_reorder_child(m_contents_box, GTK_WIDGET(m_sidebar), 1);
    }

Paso 5

 

Ahora sí, guardamos nuestros cambios y procedemos a compilar, para ello abrimos una terminal en el directorio
~/xfce4-whiskermenu-plugin/panel-plugin/ y ejecutamos lo siguiente:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
make

y como súper usuario

checkinstall

Paso 6

Por último, reiniciamos panel.

xfce4-panel --restart

Paso 7

Disfruten!!!
Cualquier duda o crítica pueden dejar un comentario, saludos.

Tu comentario es importante para mi.