mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Moving memory query status code to use sysinfo() instead of /proc.
This commit is contained in:
parent
e01506d58a
commit
465eb7dfe3
@ -33,10 +33,10 @@ struct AppletData {
|
||||
Fl_Widget *awidget; /* widget from the applet */
|
||||
AppletInfo *ainfo; /* applet informations */
|
||||
|
||||
applet_create_t create_func;
|
||||
applet_destroy_t destroy_func;
|
||||
applet_create_t create_func;
|
||||
applet_destroy_t destroy_func;
|
||||
|
||||
applet_destroy_info_t destroy_info_func;
|
||||
applet_destroy_info_t destroy_info_func;
|
||||
};
|
||||
|
||||
static void clear_applet(AppletData *a) {
|
||||
@ -112,7 +112,6 @@ bool AppletManager::load(const char *path) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
AppletData *data = new AppletData;
|
||||
data->dl = a;
|
||||
data->awidget = NULL;
|
||||
@ -132,11 +131,10 @@ bool AppletManager::load(const char *path) {
|
||||
}
|
||||
|
||||
void AppletManager::clear(void) {
|
||||
if(applet_list.empty())
|
||||
return;
|
||||
E_RETURN_IF_FAIL(applet_list.size() > 0);
|
||||
|
||||
AListIter it = applet_list.begin(), it_end = applet_list.end();
|
||||
while(it != it_end) {
|
||||
AListIter it = applet_list.begin(), ite = applet_list.end();
|
||||
while(it != ite) {
|
||||
clear_applet(*it);
|
||||
it = applet_list.erase(it);
|
||||
}
|
||||
@ -147,29 +145,29 @@ void AppletManager::clear(void) {
|
||||
* added to the group.
|
||||
*/
|
||||
void AppletManager::fill_group(Panel *p) {
|
||||
AListIter it = applet_list.begin(), it_end = applet_list.end();
|
||||
AListIter it = applet_list.begin(), ite = applet_list.end();
|
||||
AppletData *applet;
|
||||
|
||||
for(; it != it_end; ++it) {
|
||||
for(; it != ite; ++it) {
|
||||
applet = *it;
|
||||
|
||||
/* allocate memory for widget and append it to group */
|
||||
/* allocate memory for widget and append it to the group */
|
||||
applet->awidget = applet->create_func();
|
||||
p->add(applet->awidget);
|
||||
}
|
||||
}
|
||||
|
||||
void AppletManager::unfill_group(Panel *p) {
|
||||
AListIter it = applet_list.begin(), it_end = applet_list.end();
|
||||
AListIter it = applet_list.begin(), ite = applet_list.end();
|
||||
|
||||
for(; it != it_end; ++it)
|
||||
for(; it != ite; ++it)
|
||||
p->remove((*it)->awidget);
|
||||
}
|
||||
|
||||
bool AppletManager::get_applet_options(Fl_Widget *o, unsigned long &opts) {
|
||||
AListIter it = applet_list.begin(), it_end = applet_list.end();
|
||||
AListIter it = applet_list.begin(), ite = applet_list.end();
|
||||
|
||||
for(; it != it_end; ++it) {
|
||||
for(; it != ite; ++it) {
|
||||
if(o == (*it)->awidget) {
|
||||
opts = (*it)->ainfo->options;
|
||||
return true;
|
||||
|
@ -11,7 +11,7 @@
|
||||
SubDir TOP ede-panel ;
|
||||
|
||||
EdeProgram ede-panel : Hider.cpp Panel.cpp AppletManager.cpp ede-panel.cpp ;
|
||||
#ObjectC++Flags Panel.cpp : -DEDE_PANEL_LOCAL_APPLETS ;
|
||||
ObjectC++Flags Panel.cpp : -DEDE_PANEL_LOCAL_APPLETS ;
|
||||
|
||||
if $(OS) != "SOLARIS" {
|
||||
# also must use this flag (on anything but Solaris) or program will crash
|
||||
|
@ -534,8 +534,8 @@ void Panel::load_applets(void) {
|
||||
|
||||
mgr.fill_group(this);
|
||||
#else
|
||||
mgr.load("./applets/quick-launch/quick_launch.so");
|
||||
mgr.load("./applets/start-menu/start_menu.so");
|
||||
mgr.load("./applets/quick-launch/quick_launch.so");
|
||||
mgr.load("./applets/pager/pager.so");
|
||||
mgr.load("./applets/clock/clock.so");
|
||||
mgr.load("./applets/taskbar/taskbar.so");
|
||||
|
@ -1,5 +1,7 @@
|
||||
/* assume Linux here */
|
||||
#include <sys/sysinfo.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/fl_draw.H>
|
||||
@ -13,25 +15,10 @@ EDELIB_NS_USING(color_rgb_to_fltk)
|
||||
#define UPDATE_INTERVAL 1.0f
|
||||
#define STR_CMP(first, second, n) (strncmp(first, second, n) == 0)
|
||||
|
||||
static int height_from_perc(int perc, int h) {
|
||||
inline int height_from_perc(int perc, int h) {
|
||||
return (perc * h) / 100;
|
||||
}
|
||||
|
||||
static long get_number(const char *ln) {
|
||||
char *s = edelib_strndup(ln, 128);
|
||||
int i = 1;
|
||||
|
||||
for(char *p = strtok(s, " "); p; p = strtok(NULL, " "), i++) {
|
||||
if(i == 2) {
|
||||
long ret = atol(p);
|
||||
free(s);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
free(s);
|
||||
return 0;
|
||||
}
|
||||
static void mem_timeout_cb(void *d) {
|
||||
((MemMonitor*)d)->update_status();
|
||||
Fl::repeat_timeout(UPDATE_INTERVAL, mem_timeout_cb, d);
|
||||
@ -42,25 +29,14 @@ MemMonitor::MemMonitor() : Fl_Box(0, 0, 45, 25), mem_usedp(0), swap_usedp(0) {
|
||||
}
|
||||
|
||||
void MemMonitor::update_status(void) {
|
||||
FILE *fd = fopen("/proc/meminfo", "r");
|
||||
if(!fd) return;
|
||||
struct sysinfo sys;
|
||||
if(sysinfo(&sys) != 0) return;
|
||||
|
||||
long mem_total, mem_free, swap_total, swap_free;
|
||||
mem_total = mem_free = swap_total = swap_free = 0;
|
||||
|
||||
static char buf[128];
|
||||
while(fgets(buf, sizeof(buf), fd) != 0) {
|
||||
if(STR_CMP(buf, "MemTotal:", 9))
|
||||
mem_total = get_number(buf);
|
||||
else if(STR_CMP(buf, "MemFree:", 8))
|
||||
mem_free = get_number(buf);
|
||||
else if(STR_CMP(buf, "SwapTotal:", 10))
|
||||
swap_total = get_number(buf);
|
||||
else if(STR_CMP(buf, "SwapFree:", 9))
|
||||
swap_free = get_number(buf);
|
||||
}
|
||||
|
||||
fclose(fd);
|
||||
mem_total = (float)sys.totalram * (float)sys.mem_unit / 1048576.0f;
|
||||
mem_free = (float)sys.freeram * (float)sys.mem_unit / 1048576.0f;
|
||||
swap_total = (float)sys.totalswap * (float)sys.mem_unit / 1048576.0f;
|
||||
swap_free = (float)sys.freeswap * (float)sys.mem_unit / 1048576.0f;
|
||||
|
||||
mem_usedp = 100 - (int)(((float)mem_free / (float)mem_total) * 100);
|
||||
swap_usedp = 100 - (int)(((float)swap_free / (float)swap_total) * 100);
|
||||
|
Loading…
Reference in New Issue
Block a user