Автор Тема: WM со вкладками  (Прочитано 2615 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн doctor@tardis

WM со вкладками
« : 24 Ноября 2013, 19:12:22 »
Здрасти еще раз.
Вот захотелось поставить такой рабочий стол, чтоб он состоял из вкладок: вкладка для игр, вкладка для офисных программ и т.п. Есть ли такое? Думаю есть.. но а если нету, можно ли "создать" из какого-нибудь готового wm, например ОБ?

Сообщение объединено: 24 Ноября 2013, 19:32:08
Кстати, нечто похожее есть для нетбуков, дистрибутив под названием Easy Peasy..
Но там целый DE и он наверное жрет память, а нужно что-нибудь полегче..
« Последнее редактирование: 24 Ноября 2013, 19:32:08 от doctor@tardis »
 

Оффлайн I-Jurij

Re: WM со вкладками
« Ответ #1 : 24 Ноября 2013, 20:44:35 »
Нечто похожее можно сделать с менюшками разделов (игры там, офис и тд).  http://habrahabr.ru/sandbox/61115/
Запуск lxlauncher и его постоянное наличие на рабочем столе даст, наверное, тот результат который вам нужен. http://images.yandex.ua/yandsearch?stype=image&lr=959&source=psearch&text=lxlauncher%20screenshot
Кроме того есть sugar wm, который ставят (или ставили, не знаю жив ли проект) на One Laptop per Child (OLPC). http://en.wikipedia.org/wiki/Sugar_(software)
 

Оффлайн doctor@tardis

Re: WM со вкладками
« Ответ #2 : 24 Ноября 2013, 21:05:41 »
I-Jurij, Спасибо! То что я искал!
 

Оффлайн dogsleg

Re: WM со вкладками
« Ответ #3 : 25 Ноября 2013, 04:33:13 »
См. фреймовые менеджеры. Например, awesome (настройка на Lua) или xmonad (настройка на Haskell). Сам сижу на последнем, мне он кажется более стабильным и гибким.
« Последнее редактирование: 25 Ноября 2013, 04:36:35 от dogsleg »
 

Оффлайн I-Jurij

Re: WM со вкладками
« Ответ #4 : 25 Ноября 2013, 20:33:11 »
I-Jurij, Спасибо! То что я искал!
Рад, что смог помочь.
И - что именно из перечисленного подошло? (может сам что-то подобное сваяю в свободное время).
 

Оффлайн doctor@tardis

Re: WM со вкладками
« Ответ #5 : 25 Ноября 2013, 21:00:49 »
I-Jurij, lxlauncher очень понравился. Как раз то, что я искал. Я пока не знаю, насколько он настраиваемый, но если все так, как я думаю - он просто идеален для детей, для офисов и т.п. В одной вкладке можно хранить программы, в другой нужные файлы, в третьей всякую мелочь и т.д. И если между вкладками можно перемещаться с помощью горячих клавиш - это просто фантастика. Такая панелька очень подойдет для офисов, если компьютеры на лине, то можно просто сделать свой дистр с таким делением на разделы - думаю это куда удобнее, чем что-либо другое. Чем засорять рабочий стол иконками, или искать каждую программу в "пуске", в лаунчере или т.п., гораздо легче ориентироваться вот в таких вот вкладках.
 

Оффлайн SeHELLioN

Re: WM со вкладками
« Ответ #6 : 26 Ноября 2013, 20:30:23 »
комнаты кед же :) но да, возможно, тяжеловаты
Asus m5a97+Amd fx-8350+4x4GB DDR3 1600MGz+asus gtx670 DCII (перешита в top)
Debian stable
 

Оффлайн doctor@tardis

Re: WM со вкладками
« Ответ #7 : 30 Ноября 2013, 17:00:57 »
Problems.. problems everywhere!    :'(

Lxlauncher не поддерживает обоину.. хотя вот в ddlinux они как-то поставили ее.. просто копирование их файлов из home/.config/lxlauncher/, /usr/share/lxlauncher/ и /etc/xdg/lxlauncher/ на свою систему не помогло..  :'( Что мне деееелать :'(
 

Оффлайн Brainey

Re: WM со вкладками
« Ответ #8 : 30 Ноября 2013, 18:22:21 »
Lxlauncher не поддерживает обоину..
feh, не?
Конференция форума в jabber: debianforum@conference.jabber.ru | Клуб кедоводов: kde@conference.jabber.ru
 

Оффлайн I-Jurij

Re: WM со вкладками
« Ответ #9 : 30 Ноября 2013, 18:48:36 »
В doodoo собирали лаунчер с патчем, который есть на соурсфордже (недавно сам в это влез).

Сообщение объединено: 30 Ноября 2013, 18:49:22
Lxlauncher не поддерживает обоину..
feh, не?
Здесь как-бы не обоина, а фон для ланчера.

Сам патч:
From 6947858098dc0ff9d6ceb3ae520123ea721bab0b Mon Sep 17 00:00:00 2001
From: Chris Harrington <chris@harrington.jp>
Date: Tue, 14 Sep 2010 12:59:00 +0900
Subject: [PATCH] Modify lxlauncher.c to allow setting the cairo_t viewport
 background color for the notebook widget in the settings.conf file.

Modify lxlauncher.c to allow setting the notebook tab icon size in
the settings.conf file.

Modify settings.conf to reflect source changes and gtkrc to default
to system wide Gtk+ theme.

Modify README to document settings.conf.

 On branch master
 Changes to be committed:
   (use "git reset HEAD <file>..." to unstage)

modified:   README
modified:   gtkrc
modified:   settings.conf.in
modified:   src/lxlauncher.c
---
 README           |   23 +++++++-----
 gtkrc            |   25 +++++--------
 settings.conf.in |    4 ++
 src/lxlauncher.c |  105 +++++++++++++++++++++++++----------------------------
 4 files changed, 77 insertions(+), 80 deletions(-)

diff --git a/README b/README
index 4df0f04..668f6ba 100644
--- a/README
+++ b/README
@@ -1,13 +1,18 @@
 LXLauncher is an open source clone of Asus launcher for EeePC.
 It outperformes the original launcher developed by Xandros.
 
-Background images used by Asus launcher are non-free and are
-hence not included in this package.
-
-Please put the images in /usr/share/lxlauncher/backround.
-LXLauncher will use those background images if available.
-
-Also, if you put the tab icons of Asus launcher under
-/usr/share/lxlauncher/icons, they will be used in the tabs.
-Otherwise, some icons from the gtk+ icon theme will be used instead.
+Several settings can be configured in the
+/etc/xdg/lxlauncher/settings.conf
+file, including button and icon size and background color (new!).
+Button and icon size are set and pixels.
+The R,G,B values for the background are set by entering a double
+between 0.0 and 256.0 for each of VIEWPORT_RED, VIEWPORT_GREEN,
+and VIEWPORT_BLUE. The background color cannot be changed
+by the systemwide Gtk+ theme or gtkrc file.
 
+The launcher can be themed according to the Gtk+ theming
+rules in the file:
+/etc/xdg/lxlauncher/gtkrc
+See http://live.gnome.org/GnomeArt/Tutorials/GtkThemes for more
+information. The current file sets only font and otherwise
+defaults to the systemwide Gtk+ theme.
diff --git a/gtkrc b/gtkrc
index 2ae1c47..5bf744c 100644
--- a/gtkrc
+++ b/gtkrc
@@ -1,19 +1,12 @@
-style "launcher-bg" { # for the background GtkWindow
-    bg[NORMAL] = "#3675AD"
-}
-style "launcher-fg" { # for the text size/color
+style "launcher-button-fg" { # for the button text size/color
     font_name="Sans Bold 11"
-    fg[NORMAL]="#3675AD"
-    fg[PRELIGHT]="#3675AD"
 }
-style "launcher-nb" = "launcher-fg" { #for the notebook
-    bg[NORMAL] = "#ffffff"
-    #"bg[SELECTED] = "#3675AD"
-    fg[ACTIVE] = "#ffffff" #text color for non-active tabs
-    bg[ACTIVE] = "#3675AD" #the other non-active tabs
+
+style "launcher-tab-fg" { # for the notebook tab text size/color
+    font_name="Sans Bold 11"
 }
-widget_class "*<GtkNotebook>" style "launcher-nb"
-widget_class "*<GtkNotebook><GtkHBox><GtkLabel>" style "launcher-nb"
-widget "GtkWindow" style "launcher-bg"
-widget_class "*<ExoWrapTable><GtkButton>*<GtkLabel>" style "launcher-fg"
-widget_class "*<GtkVBox><GtkHBox><GtkLabel>" style "launcher-fg"
+
+widget_class "*<GtkNotebook><GtkHBox><GtkLabel>" style "launcher-tab-fg"
+
+widget_class "*<ExoWrapTable><GtkButton>*<GtkLabel>" style "launcher-button-fg"
+widget_class "*<GtkVBox><GtkHBox><GtkLabel>" style "launcher-button-fg"
diff --git a/settings.conf.in b/settings.conf.in
index b10695e..44945e7 100644
--- a/settings.conf.in
+++ b/settings.conf.in
@@ -1,3 +1,7 @@
 [Main]
 BUTTON_SIZE=120
 IMG_SIZE=48
+TAB_IMG_SIZE=1
+VIEWPORT_RED=256.0
+VIEWPORT_GREEN=256.0
+VIEWPORT_BLUE=256.0
diff --git a/src/lxlauncher.c b/src/lxlauncher.c
index 3a39bc6..df1bec2 100644
--- a/src/lxlauncher.c
+++ b/src/lxlauncher.c
@@ -2,6 +2,7 @@
  *      lxlauncher.c - Open source replace for EeePC Asus Launcher
  *
  *      Copyright 2008 PCMan <pcman.tw@gmail.com>
+ *      Modified 2010 Chris Harrington <chris@harrington.jp>
  *
  *      This program is free software; you can redistribute it and/or modify
  *      it under the terms of the GNU General Public License as published by
@@ -50,6 +51,8 @@
 
 #define BUTTON_SIZE_FALLBACK 120
 #define IMG_SIZE_FALLBACK 48
+// Added fallback default value to use for each of r, g, b for viewport background color
+#define VIEWPORT_COLOR_FALLBACK 128.0
 
 static GtkWidget* main_window;
 static GtkWidget* notebook;
@@ -68,6 +71,12 @@ static GKeyFile *key_file;
 
 static gint button_size;
 static gint img_size;
+// Added three global variables for viewport background color, double between 0.0 and 256.0
+static gdouble viewport_red;
+static gdouble viewport_green;
+static gdouble viewport_blue;
+// Notebook tab icon size, accepts int between 1 and 6
+static gint tab_img_size;
 
 typedef struct _PageData{
     MenuCacheDir* dir;
@@ -264,6 +273,7 @@ static void add_app_btn( GtkWidget* table, MenuCacheApp* app )
 
 static gboolean on_viewport_expose( GtkWidget* w, GdkEventExpose* evt, gpointer data )
 {
+
     GObjectClass* oc = G_OBJECT_GET_CLASS(w);
     GtkWidgetClass* wc = (GtkWidgetClass*)g_type_class_peek_parent( oc );
     GdkPixmap* pixmap = (GdkPixmap*)data;
@@ -280,11 +290,12 @@ static gboolean on_viewport_expose( GtkWidget* w, GdkEventExpose* evt, gpointer
         //pat = cairo_pattern_create_linear( 0, gtk_adjustment_get_value(vadj), 0, w->allocation.height + gtk_adjustment_get_value(vadj) );
         //cairo_pattern_add_color_stop_rgb( pat, 0, 1, 1, 1);
         //cairo_pattern_add_color_stop_rgb( pat, 1.0, ((gdouble)184/256), ((gdouble)215/256), ((gdouble)235/256));
-//        cairo_rectangle(cr, 0, 0, w->allocation.width, w->allocation.height );
-//        cairo_rectangle(cr, evt->area.x, evt->area.y, evt->area.width, evt->area.height );
+        //cairo_rectangle(cr, 0, 0, w->allocation.width, w->allocation.height );
+        //cairo_rectangle(cr, evt->area.x, evt->area.y, evt->area.width, evt->area.height );
         cairo_rectangle(cr, evt->area.x, evt->area.y, evt->area.width, evt->area.height );
         //cairo_set_source(cr, pat);
-        cairo_set_source_rgb(cr, 184.0/256, 215.0/256, 235.0/256);
+        // Changed this to use the three new variables in the config file.
+        cairo_set_source_rgb(cr, viewport_red/256, viewport_green/256, viewport_blue/256);
         cairo_fill(cr);
         //cairo_pattern_destroy(pat);
         cairo_destroy(cr);
@@ -311,7 +322,6 @@ static gboolean on_scroll( GtkAdjustment* adj, PageData* data )
 {
     // Dirty hacks used to force pseudo-transparent background
     gtk_widget_queue_draw( data->table );
-    return TRUE;
 }
 
 // Dirty hacks used to reduce unnecessary redrew during scroll
@@ -605,7 +615,7 @@ static void create_notebook_pages()
         g_signal_connect( adj, "value-changed", G_CALLBACK(on_scroll), page_data );
 
         // create label
-        image = gtk_image_new_from_icon_name( menu_cache_item_get_icon(dir), GTK_ICON_SIZE_MENU );
+        image = gtk_image_new_from_icon_name( menu_cache_item_get_icon(dir), tab_img_size );
 
         gtk_box_pack_start( label, image, FALSE, TRUE, 2 );
         gtk_box_pack_start( label, gtk_label_new( menu_cache_item_get_name(dir) ), FALSE, TRUE, 2 );
@@ -663,38 +673,18 @@ gchar* get_xdg_config_file(const char *name) {
     gchar *file;
 
     file = g_build_filename(user_dir, name, NULL);
-    if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE)
-    return file;
+    if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE) {
+ return file;
+    }
     free(file);
 
     for (dir = system_dirs; *dir; ++dir ) {
-        file = g_build_filename(*dir, name, NULL);
-        if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE)
-            return file;
-     free(file);
-    }
-    return NULL;
-}
-
-static void on_menu_cache_reload(MenuCache* mc, gpointer user_data)
-{
-    GMainLoop* mainloop = (GMainLoop*)user_data;
-    g_main_loop_quit(mainloop);
-}
-
-MenuCache* _menu_cache_lookup_sync( const char* menu_name )
-{
-    MenuCache* mc = menu_cache_lookup(menu_name);
-    /* ensure that the menu cache is loaded */
-    if(! menu_cache_get_root_dir(mc)) /* if it's not yet loaded */
-    {
-        GMainLoop* mainloop = g_main_loop_new(NULL, FALSE);
-        gpointer notify_id = menu_cache_add_reload_notify(mc, on_menu_cache_reload, mainloop);
-        g_main_loop_run(mainloop);
-        g_main_loop_unref(mainloop);
-        menu_cache_remove_reload_notify(mc, notify_id);
+ file = g_build_filename(*dir, name, NULL);
+ if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE) {
+     return file;
+ }
+ free(file);
     }
-    return mc;
 }
 
 int main(int argc, char** argv)
@@ -716,14 +706,13 @@ int main(int argc, char** argv)
     GError *error = NULL;
     gchar *config_file = get_xdg_config_file(CONFIG_FILE);
     if (config_file &&
-        g_key_file_load_from_file(key_file,
-                      config_file,
-                      G_KEY_FILE_NONE,
-                      &error)) {
-    printf("Loaded %s\n", config_file);
-    }
-    else {
-    perror("Error loading " CONFIG_FILE);
+ g_key_file_load_from_file(key_file,
+   config_file,
+   G_KEY_FILE_NONE,
+   &error)) {
+ printf("Loaded %s\n", config_file);
+    } else {
+ perror("Error loading " CONFIG_FILE);
     }
     if (config_file)
  free(config_file);
@@ -733,23 +722,34 @@ int main(int argc, char** argv)
     // Add application specific properties
     gtk_settings_install_property(g_param_spec_boolean("lxlauncher-enable-key",
                             _("Enable key navigation"),
-                            _("Allow users to use up/down/left/right/tab/enter keys to operate the lxlauncher"),
+                            _("Allow users to use up/down/left/right/tab/enter keys to operate the lxlaucher"),
                             FALSE,GTK_ARG_READWRITE));
     // set up themes for notebook
     gchar* gtkrc_file = get_xdg_config_file("lxlauncher/gtkrc");
-    gtk_rc_parse(gtkrc_file);
+ // CCH change: put gtk_rc_parse inside the if. Program throws error if there is no gtkrc file
     if (gtkrc_file) {
-    free(gtkrc_file);
+ gtk_rc_parse(gtkrc_file);
+ free(gtkrc_file);
     }
 
     button_size = g_key_file_get_integer(key_file, "Main", "BUTTON_SIZE", NULL);
     img_size = g_key_file_get_integer(key_file, "Main", "IMG_SIZE", NULL);
+   
+    // Added read background color from the config file
+    viewport_red = g_key_file_get_double(key_file, "Main", "VIEWPORT_RED", NULL);
+    viewport_green = g_key_file_get_double(key_file, "Main", "VIEWPORT_GREEN", NULL);
+    viewport_blue = g_key_file_get_double(key_file, "Main", "VIEWPORT_BLUE", NULL);
+    // Added read tab image size from the config file
+    tab_img_size = g_key_file_get_integer(key_file, "Main", "TAB_IMG_SIZE", NULL);
 
     // to prevent from going without configure file
-    if(!button_size)
-        button_size = BUTTON_SIZE_FALLBACK;
-    if(!img_size)
-        img_size = IMG_SIZE_FALLBACK;
+    if(!button_size) button_size = BUTTON_SIZE_FALLBACK;
+    if(!img_size) img_size = IMG_SIZE_FALLBACK;
+    // added fallback for viewport background color and tab img size
+    if(!viewport_red) viewport_red = VIEWPORT_COLOR_FALLBACK;
+    if(!viewport_green) viewport_green = VIEWPORT_COLOR_FALLBACK;
+    if(!viewport_blue) viewport_blue = VIEWPORT_COLOR_FALLBACK;
+    if(!tab_img_size) tab_img_size = GTK_ICON_SIZE_MENU;
 
     icon_size = gtk_icon_size_register( "ALIcon", img_size, img_size );
 
@@ -780,14 +780,9 @@ int main(int argc, char** argv)
     gtk_container_add( (GtkContainer*)main_window, notebook );
 
     g_setenv("XDG_MENU_PREFIX", "lxlauncher-", TRUE);
-    menu_tree = _menu_cache_lookup_sync( "applications.menu" );
-    if(!menu_tree)
-    {
-        g_print("Unable to load application menu\n");
-        return 1;
-    }
-    root_dir = menu_cache_item_ref(menu_cache_get_root_dir( menu_tree ));
+    menu_tree = menu_cache_lookup( "applications.menu" );
     reload_notify_id = menu_cache_add_reload_notify( menu_tree, on_menu_tree_changed, NULL );
+    root_dir = menu_cache_ref(menu_cache_get_root_dir( menu_tree ));
 
     create_notebook_pages();
 
--
1.7.0.4

Сообщение объединено: 30 Ноября 2013, 19:24:44
И еще можно скачать из ubuntu 12.04 (presize) lxlauncher+libmenu-cache3 (нужен как зависимость) и поставить их. Там уже пропатчено.
« Последнее редактирование: 30 Ноября 2013, 19:24:44 от I-Jurij »
 

Оффлайн doctor@tardis

Re: WM со вкладками
« Ответ #10 : 30 Ноября 2013, 20:41:14 »
I-Jurij, вы просто не представляете, насколько я вам благодарен! Вы спасли несколько часов моей жизни! Если мы когда-нибудь пересечемся, с меня пиво!)
 

Оффлайн I-Jurij

Re: WM со вкладками
« Ответ #11 : 30 Ноября 2013, 20:46:41 »
Спасибо!
Заработало, то есть? Самому интересно.
 

Оффлайн doctor@tardis

Re: WM со вкладками
« Ответ #12 : 30 Ноября 2013, 20:52:35 »
I-Jurij, пока  не проверил.. как проверю, отпишусь
 

Теги: